策略模式

策略模式

2020-09-21
设计模式
  • 定义:定义一系列算法,把他们一个个封装起来,并且使它们可以互相替换(变化),该模式使得算法可独立于使用他的客户程序而变化。
  • 在软件构建过程中,某些对象使用的算法可能多种多样,策略模式做到了运行时根据需要透明的更改对象的算法,将对象与自身解耦。
  • 比如税率,如果要求一个程序支持多国税率,可以使用if-else语句。
class Sale{
    public double buySomething(){
        double d=xxx;
        //...
        if(tax==ChineseTax){
            //...
        }else if(tax==AmericeTax){
            //...
        }elseif(tax==JapanTax){
            //...
        }
        //...
    }
}
  • 但是如果后期需要加上其他国家的税率,就要修改程序,违背了开闭原则。此时可以使用策略模式。实现如下:
interface Tax{
    public double calculate(double money);
}

class ChineseTax implements Tax{
    public double calculate(double money){
        //...
    }
}
class AmericaTax implements Tax{
    public double calculate(double money){
        //...
    }
}

class Sale{
    private Tax tax;
    public Sale(Tax tax){this.tax=tax;}
    
    public double buySomething(){
        double d=xxx;
        //...
        tax.calculate(d);//替换掉先前的if-else
        //...
    }
}