现在的位置: 首页 > 综合 > 正文

Strategy模式

2013年06月24日 ⁄ 综合 ⁄ 共 849字 ⁄ 字号 评论关闭

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派生一个新类予以实现即可.

参考:<设计模式解析>

抱歉!评论已关闭.