读书人

设计方式学习笔记-Strategy模式

发布时间: 2012-10-26 10:30:59 作者: rapoo

设计模式学习笔记-Strategy模式

《设计模式》对Strategy模式的意图描述:定义一系列算法,把他们封装起来,并可相互替换,使算法可独立于使用他的客户而变化。

《设计模式解析》实例:

1.未使用Strategy模式做法:

?java 代码? 使用继承
?
  1. public?class?TaskController{?? ??
  2. ????public?void?process(){?? ????????SaleOrder?so?=?null;??
  3. ????????switch(country){?? ????????????case?us?:?so?=?new?UsSaleOrder();??
  4. ????????????case?en?:?so?=?new?EnSaleOrder();?? ????????}??
  5. ????????so.process();?? ????}?????
  6. }?? ??
  7. class?UsSaleOrder?extends?SaleOrder{}? //此为直接使用继承 class?EnSaleOrder?extends?SaleOrder{}??



2.使用Strategy模式

java 代码?
  1. public?class?TaskController{?? ????public?void?process(){??
  2. ????????CalcTax?myTax?=?getTaxRules(country);? //通过此方法获得具体算法 ????????SaleOrder?so?=?new?SaleOrder();??
  3. ????????so.process(myTax);?? ????}?????
  4. }?? ??
  5. class?SaleOrder{?? ????public?void?process(CalcTax?taxToUse){? //SaleOrder使用了组合,而非直接继承SaleOrder
  6. ????????taxToUse.taxAmount();?? ????}??
  7. }?? ??
  8. abstract?class?CalcTax{?? ????abstract?public?double?taxAmount();??
  9. }?? ??
  10. //将具体算法,封装在CalcTax抽象类中?? class?UsTax?extends?CalcTax{}??
  11. class?EnTax?extends?CalcTax{}??


3.好处

a.简化更大、更复杂程序
b.可独立于SaleOrder使用,更小的操作性

  1. "狂放不羁"的补充不错,添加进来了~ ????
  2. 策略模式体现出了OO设计原则: ????
  3. 1?多用组合来实现动态的添加行为,而少用继承。继承使得耦合性增加。(favor?compostion?than?inheritance) ????
  4. 2?面向抽象编程,而不要具体实现编程。(programe?to?interface,not?to?implementation) ????
  5. 3?策略模式是把各种可能变化的东西(算法)进行了encapsulate,这样就实现了变化的部分和保持不变的部分分离,进而减低代码的耦合性。 ??
1 楼 eivenchan 2007-11-01 补充点好处:符合开闭原则,维持系统稳定的同时,拥抱变化!

楼下继续 2 楼 sptzone 2007-11-01 例子写得很好。
将Strategy模式写得很彻底!
顶! 3 楼 狂放不羁 2007-11-01 策略模式体现出了OO设计原则:
1 多用组合来实现动态的添加行为,而少用继承。继承使得耦合性增加。(favor compostion than inheritance)
2 面向抽象编程,而不要具体实现编程。(programe to interface,not to implementation)
3 策略模式是把各种可能变化的东西(算法)进行了encapsulate,这样就实现了变化的部分和保持不变的部分分离,进而减低代码的耦合性。

读书人网 >软件开发

热点推荐