《Head First Design Pattern》——策略模式
作者:互联网
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
设计原则:
- 需要变化的代码要和不需要变化的代码分开。即把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
- 针对接口编程,而不是针对实现编程。
- 多用组合,少用继承。
我的理解:
类似书中提到的鸭子的例子,鸭子会飞,会叫。但是每种鸭子叫和飞的方式不一样,这是变化的部分。具体的类,即鸭子,可以选择会飞还是不会飞,会叫还是不会叫,就像选择策略一样。那么这些算法/策略,可以定义为一个接口。
有抽象类 Duck,有多种策略FlyBehavior、QuackBehavior可选。
如果要存在一个具体的 Aduck 类,那么只要继承 Duck,然后就可以拥有它自己定义的算法。(所以这一步需要抽象类 Duck 的策略定义是接口,利用了多态。)
所谓“拥有它自己定义的算法”
例如,有一个类 Aduck,
Aduck.setFlyBehavior(new FlyWithWings());
为什么要有抽象类 Duck 呢?因为如果我们想要增加策略,例如购物打折那种,可以存在很多的算法/策略。那么可以直接在抽象类上定义,不用一个一个修改具体类。
(那新增了策略以后,不是所有的具体类都是重新赋值一下这个新的策略吗?还是说在抽象类中可以设置一个默认的?)
标签:Head,策略,Pattern,算法,Design,鸭子,Duck,抽象类,定义 来源: https://www.cnblogs.com/isxyl/p/14793231.html