基本模式
利用继承来扩展飞行技能
当涉及"维护"时,为了"复用" (revse)目的而使用继承,结局并不怎么完美,会导致不应该具备某项能力的的类具备某项能力,比如会飞的橡皮鸭子。此时需要添加子类时必须根据子类的特性覆盖掉从基本超类继承来的飞行方法或者咕咕叫方法。
利用接口来扩展飞行技能
新的问题:代码复用性变差,需要统一修改飞行行为很不方便
设计原则:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
实现:把会变化的部分去除并封装起来,好让其他部分不会受到影响。
结果:代码变化引起的不经意后果变少,系统变得更有弹性。
分开变化和不会变化的部分,即分开属性和行为,鸭子类不需要知道行为的实现细节。
设计原则:针对接口编程,而不是针对实现类编程
"针对接口编程"真正的意思是"针对超类型(supertype)编程",利用多态,程序可以针对超类型编程,执行时会根据实际情况执行到真正的行为,不会绑死在超类型的行为上。
我们可以通过set方法改变成员属性接口的值来动态改变类的行为。
设计原则:多用组合,少用继承。
总结:类设计时我们常将常变化的与不常变化的分离开(如属性与行为),面向接口编程(成员属性接口实现多态)而不是面向实现类编程,方便根据不同类设置不同的行为;多用组合,少用继承,减少多余技能问题,慎用接口以提高代码复用性。
基本概念
策略模式定义了算法族,分别封装起来,让他们之间可以相互替换。此模式让算法的变化独立于使用算法的用户。
详细说明:定义算法族接口,不同的算法实现类,超类中设定算法族成员属性接口,添加方法调用算法族接口方法,通过set方法可以动态的修改行为。