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
//...
}
}