《Head First Design Pattern》——策略模式

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

设计原则:

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

 

 

我的理解:

类似书中提到的鸭子的例子,鸭子会飞,会叫。但是每种鸭子叫和飞的方式不一样,这是变化的部分。具体的类,即鸭子,可以选择会飞还是不会飞,会叫还是不会叫,就像选择策略一样。那么这些算法/策略,可以定义为一个接口。

《Head First Design Pattern》——策略模式

 

 

 

 

有抽象类 Duck,有多种策略FlyBehavior、QuackBehavior可选。

如果要存在一个具体的 Aduck 类,那么只要继承 Duck,然后就可以拥有它自己定义的算法。(所以这一步需要抽象类 Duck 的策略定义是接口,利用了多态。)

所谓“拥有它自己定义的算法”

例如,有一个类 Aduck,

Aduck.setFlyBehavior(new FlyWithWings());

 

为什么要有抽象类 Duck 呢?因为如果我们想要增加策略,例如购物打折那种,可以存在很多的算法/策略。那么可以直接在抽象类上定义,不用一个一个修改具体类。

(那新增了策略以后,不是所有的具体类都是重新赋值一下这个新的策略吗?还是说在抽象类中可以设置一个默认的?)

 

上一篇:Java设计模式--策略模式


下一篇:斐讯路由器K2 PSG1218 后面RESET按键无法重置路由器的解决方法