策略模式:对于不同的情况采取不同的策略,分离算法族,有人会说用if else不方便吗,简单的代码肯定是条件判断语句方便,但稍微复杂点的情况就非常难以书写,且非常不便于维护和可读性极差。
应用场景: 使用Spring的依赖功能,可以通过配置文件,动态注入不同策略,动态切换不同算法。
代码演示:
1.策略接口及四个策略对象:
接口
(1)新客户,小批量不打折
public class NewCustomerFewStrategy implements Strategy {
@Override
public double getprice(double standarPrice) {
System.out.println("不打折");
return standarPrice;
}
}
(2)新客户,大批量九折
class NewCustomerManyStrategy implements Strategy {
@Override
public double getprice(double standarPrice) {
System.out.println("打九折");
return standarPrice*0.9;
}
}
(3)老客户,小批量85折
class OldCustomerFewStrategy implements Strategy {
@Override
public double getprice(double standarPrice) {
System.out.println("打八折");
return standarPrice*0.85;
}
}
(4)老客户,大批量七折
class OldCustomerManyStrategy implements Strategy {
@Override
public double getprice(double standarPrice) {
System.out.println("打七折");
return standarPrice*0.7;
}
}
2.策略控制对象:
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void pringPrice(double s){
System.out.println("您的报价:"+strategy.getprice(s));
}
}
3.测试:
public static void main(String[] args) {
Strategy s1=new OldCustomerManyStrategy();
Context context=new Context(s1);
context.pringPrice(1000);
Strategy s2 = new NewCustomerFewStrategy();
context.setStrategy(s2);
context.pringPrice(1000);
}
结果:
打七折
您的报价:700.0
不打折
您的报价:1000.0



