《设计模式》对Strategy模式的意图描述:定义一系列算法,把他们封装起来,并可相互替换,使算法可独立于使用他的客户而变化。
《设计模式解析》实例:
1.未使用Strategy模式做法:
java 代码 使用继承
- 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模式
java 代码
- 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使用,更小的操作性