设计模式(一)策略模式

从一个软件的开发阶段来看,可分为上线前、上线后两个阶段。当系统上线后,必然跟随着源源不断的需求变更。拥有设计出一个可维护、可扩展系统的能力,对于一个程序员来说至关重要(摆脱体力活的起点啊O(∩_∩)O哈哈~)。建立可维护的OO(面向对象)系统,要诀在于随时想到系统以后可能需要的变化以及应付变化的原则。设计模式是基于前人的经验总结出的这么一套用于适应变化的代码设计套路。(也为了可以在阅读第三方框架时,更好的理解和吸收代码设计的优点)

策略模式

定义

定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

UML结构

类关系说明

从UML结构图可以看出:

  1. FlyBehavior、QuackBehavior接口,抽象了fly、quack两个行为。此时这两个行为的变化被作为接口从Duck类抽离出来
  2. Duck作为抽象基类,组合了FlyBehavior、QuackBehavior用于代理执行performFly()、performQuack()方法;并且提供了setFlyBehavior、setQuackBehavior方法用于动态修改Duck持有的FlyBehavior、QuackBehavior接口具体实现类实例,以修改Duck行为
  3. MallardDuck继承了Duck类,并实现了display抽象方法

总结

策略模式应用OOP(面向对象编程)的特性(抽象、封装、多态、继承),遵循以下设计原则:

  1. 把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分
  2. 针对接口编程,而不是针对实现编程
  3. 多用组合,少用继承

源码地址

design_pattern_learn