设计模式让开发者有共同语言。大部分的设计模式着眼于软件变化的主题,允许系统局部改变独立于其他部分。分析项目中变化和不变的部分。
设计模式是前人归纳总结的经验,通用的解决方案。
面向对象原则:可扩充,可复用,可维护。面向对象基础:抽象,多态,继承,封装。
把系统的变化的部分封装。
针对接口编程,与多态相关,与面向超类编程有关。
策略模式:?定义一系列算法,分别封装,让它们可以相互替换。算法的变化独立于使用算法的客户。?
策略原则:封装变化;多用组合少用继承(有一个比是一个好);针对接口编程而不是根据实现编程。
分析项目中变化的和不变的部分,提取变化的部分,抽象为接口和实现。
好处:新增行为很简单,行为类更好的复用,组合更方便。
行为族相互之间可以替换。用行为的组合而不是继承更有弹性。
行为封装为对象。分别封装行为接口,实现算法族,超类中放行为接口对象,在子类里具体设定行为对象。分离变化的部分,封装接口,基于接口编程各种功能,让行为算法的变化独立于算法的使用者。
代码举例:现需要开发某系统,关于鸭子。世界上有千奇百怪各种式样的鸭子,它们存在共性(例如有心脏等),它们存在差异(叫声,飞翔本领)。对于一个这样的系统,我们可以建立一个鸭子的超类,将很多共性的东西放入最上层的超类中。
问题:有的鸭子会飞,有的不会,如果对此类鸭子处理?
答:1、最上层的超类中直接写入fly()方法,子类运用或复写。2、最上层的超类中写入abstract fly方法,需要运用的覆盖,不需要使用的写入一个空方法。3、子类继承超类后直接添加新的方法。显然以上三种方式不符合可拓展,可维护,可复用的特性。会引起各式各样的问题。