y(new FullLessDiscount(100,20));
System.out.println("现价:"+context.getDiscountPrice(122));
}
}
interface DiscountStrategy{
BigDecimal getDiscount(BigDecimal price);
}
//会员
class VipDiscount implements DiscountStrategy{
public VipDiscount(double base) {
this.base=base;
}
//会员的基数
private double base;
public BigDecimal getDiscount(BigDecimal price) {
return price.multiply(new BigDecimal(base));
}
}
//满减
class FullLessDiscount implements DiscountStrategy{
public FullLessDiscount(double full,double less) {
this.full=full;
this.less=less;
}
//会员的基数
private double full;
private double less;
public BigDecimal getDiscount(BigDecimal price) {
if (price.compareTo(new BigDecimal(full))<0) {
return price;
}
return price.subtract(new BigDecimal(less));
}
}
class DiscountContext{
DiscountStrategy strategy;
public DiscountContext(DiscountStrategy strategy) {
this.strategy=strategy;
}
public DiscountStrategy getStrategy() {
return strategy;
}
public void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
public double getDiscountPrice(double price){
if (strategy==null) {
strategy=new VipDiscount(1);
}
return strategy.getDiscount(new BigDecimal(price)).doubleva lue();
}
}
策略模式和状态模式很相似,但状态模式侧重状态方面,一般不会接受新的状态对象,即系统已经定义足够的状态
策略侧重不同的行为的改变在统一的接口下,强调多态下面行为的执行过程,处理过程,可以从用户那里接受参数,只要用户提供的策略符合接口