策略模式
Don't
- 在维护代码的时候,若为了复用而使用继承,将功能写在父类中,结果可能会让不想拥有此行为的子类拥有行为,不好。
- 接口可以解决上述问题,将方法写在接口中,然后需要此行为的子类就去实现这个接口,但是造成的问题是接口的实现出现在每个子类当中,代码没有办法复用。
Do
- 在程序中将有可能需要改动的部分封装独立出来,不要和不需要改变的部分混在一起。分开变化和不会变化的东西。
- 要针对接口编程,而不是针对实现编程。
- 鸭子例子中,在Duck类中加入两个成员接口flyBehavior和quarkBehaviro。然后各种飞行和叫的行为实现这两个接口,在创建Duck子类的时候在子类的构造函数中将这两个成员接口指定具体行为类。
- 鸭子的飞行和叫的行为不是继承而来的,而是从别的行为对象组合而来的。所以多用组合,少用继承。
策略模式定义了算法族,分别封装起来,让他们直接可以相互替换,将算法的变换独立出来。