设计模式学习笔记-Strategy模式
《设计模式》对Strategy模式的意图描述:定义一系列算法,把他们封装起来,并可相互替换,使算法可独立于使用他的客户而变化。
《设计模式解析》实例:
1.未使用Strategy模式做法:
?
- public?class?TaskController{?? ??
- ????public?void?process(){?? ????????SaleOrder?so?=?null;??
- ????????switch(country){?? ????????????case?us?:?so?=?new?UsSaleOrder();??
- ????????????case?en?:?so?=?new?EnSaleOrder();?? ????????}??
- ????????so.process();?? ????}?????
- }?? ??
- class?UsSaleOrder?extends?SaleOrder{}? //此为直接使用继承 class?EnSaleOrder?extends?SaleOrder{}??
2.使用Strategy模式
- public?class?TaskController{?? ????public?void?process(){??
- ????????CalcTax?myTax?=?getTaxRules(country);? //通过此方法获得具体算法 ????????SaleOrder?so?=?new?SaleOrder();??
- ????????so.process(myTax);?? ????}?????
- }?? ??
- class?SaleOrder{?? ????public?void?process(CalcTax?taxToUse){? //SaleOrder使用了组合,而非直接继承SaleOrder
- ????????taxToUse.taxAmount();?? ????}??
- }?? ??
- abstract?class?CalcTax{?? ????abstract?public?double?taxAmount();??
- }?? ??
- //将具体算法,封装在CalcTax抽象类中?? class?UsTax?extends?CalcTax{}??
- class?EnTax?extends?CalcTax{}??
3.好处
a.简化更大、更复杂程序
b.可独立于SaleOrder使用,更小的操作性
- "狂放不羁"的补充不错,添加进来了~ ????
- 策略模式体现出了OO设计原则: ????
- 1?多用组合来实现动态的添加行为,而少用继承。继承使得耦合性增加。(favor?compostion?than?inheritance) ????
- 2?面向抽象编程,而不要具体实现编程。(programe?to?interface,not?to?implementation) ????
- 3?策略模式是把各种可能变化的东西(算法)进行了encapsulate,这样就实现了变化的部分和保持不变的部分分离,进而减低代码的耦合性。 ??
楼下继续 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,这样就实现了变化的部分和保持不变的部分分离,进而减低代码的耦合性。