Strategy模式就和他的名字一样,策略模式
是很常用的模式之一
Strategy模式的做法: 1. 寻找变化,并将它封装在一个单独的类中 2.将这个类包含在另一个类中
常用在需要分支语句或需要继承的情况下
如果程序存在多个IF, SWITCH(SELECT CASE),或者多重的继承结构时,就应当考虑使用Strategy模式
拿购买电脑举个例子:
A公司需要购买DELL的电脑
B公司需要购买HP的电脑
那可以有这样一个分支语句
select (公司)
case a:
DELL;
case b:
HP
好像不太复杂,但是如果有更多的公司需要购买, C公司需要IBM的, 而B公司的员工B1需要一台笔记本
select (公司)
case a:
DELL;
case b:
if(人员==b1)
笔记本;
else
HP;
case c:
IBM;
分支本身越来越复杂,并且难以理解
用继承的角度来看这个问题
电脑
|---------|-----------|
A:DELL B:HP C:IBM
|-------|
B1:NOTE B~:HP
最终总会产生太深的继承层次
Strategy模式的解决办法: 封装"购买电脑"这个行为, 创建一个抽象类定义如果完成购买行为,然后为每个购买行为派生具体实现,.
PCSales
+Sale()
具体每个公司的订单可以通过派生这个类来实现各自的需求
然后采用组合取代继承,创建一个SalesOrder类,让它包含处理变化的PCSales类
MainControl
| (使用)
SalesOrder
+PC()
| (包含)
PCSales
+Sale()
------|----- (派生)
|---|---|---|
A B1 B C
这种方法的优点是,提高了内聚度,销售订单由专门的类完成,在有新的购买需求时,只需要从PCSales派生一个新类予以实现即可.
参考:<设计模式解析>