问题引入
如何使用可重用的方式制作一个游戏对象?
如何将游戏对象从核心引擎代码中解耦?
如何让游戏对象灵活地足以应对未来游戏的变化?
关于编程的思考
编程的本质:产生一个想法后,问题是如何有逻辑且正确地把这个想法描述给计算机。
通常有2种解决该问题的方法。
- 容易的方法:尽可能快地解决。
如:硬编码、复制许多同样的代码块、不考虑新写的内容对已有内容的影响。
通常容易的方法会导致未来的工作越来越困难。因为没考虑对已有内容的影响。 - “正确”的方法
考虑新内容可能会影响已有内容的地方,如何应对未来可能出现的变化(未来可能出现哪些变化,为其预留余地)。
正确并不意味着唯一。这也是编程的乐趣所在。
编程原则:找到所有可能发生变化的地方,封装它。(把变化的和不变化的内容区分开来)
策略模式
封装行为,外部对象通过接口来控制行为。(而非直接把外部和行为绑定在一起)
在生成具体对象时,将相应的行为注入给它。在控制对象执行某行为时,实际是让该对象执行自己持有的行为控制中的相应行为。
对象只要知道自己能做什么就行,不需要知道自己要怎么做。
如动物类中有一个方法是叫,其持有一个叫的行为,该行为中有一个方法是叫。
可以在创建具体动物对象或其他时候将某种叫的行为(也是一个具体的对象)赋给该动物对象。当外部调用该动物对象的叫方法时,该叫方法内调用前述叫的行为中的叫方法。
通过这种方式,将叫的行为和动物本身解耦,使叫的行为可被复用。
装饰器模式
在需要时才动态地添加职责。
用装饰类把原类包起来,在装饰类中增加新的方法。
实际做时,需要先做一个抽象装饰类,在其中做一个指向原类对应对象的引用、定义新方法。在具体装饰类中实现新方法。
可以让该抽象装饰类继承原类对应的抽象类,该抽象装饰类中,原类中的各方法的实现:直接调用其引用的原类对应对象中的相应方法。
组件对象模型
对象是一组对象的容器。
可以向对象容器中添加或从中移除各类组件(每个组件有自己的数据和功能)。
网友评论