抛砖引玉篇--策略模式
策略模式
1.定义:
定义并封装算法(行为)族,这些算法(行为)之间可以相互替换。
将算法(行为)的替换独立于使用这些算法的客户。
2.分析:
这些算法是可以被替换扩展的,即属于变化部分。
@1.如果将其做成抽象方法,然后在派生类中具体实现。
这样存在的问题如下:
#1.将算法实现绑定在用户中,如果多个派生使用相同的算法,
则必须为每个派生类编写相同的算法代码,违背“代码复用”原则。
#2.当需要替换具体算法时,需要到每个派生类中去修改,增加维护成本。
@2.恰当的做法如下:
#1.将变化部分独立出来,做成接口类,用户拥有这些接口类,就可以使用算法。
接口类根据需要可以有不同的现实,对用户来说可以不关心算法的更改。
做到了“对扩展开放,对修改关闭”的原则。
- 类图:
note:
User通过setBehavior()可以自由的替换不同的算法(行为)。