(如有错漏之处,敬请指正)
策略模式?
最近在学习java的设计模式。按我的理解,策略模式就是定义了一个抽象的接口,然后通过不同的实现类根据实际的业务去做封装,最终通过包装类实例化实现类并调用,这样的好处是不需要很多的判断,用哪个实例化哪个。不好的地方是要随着业务的变更新增实现类。代码走起~
定义抽象接口charge
public interface Charge {
double Cash(Integer price, Integer num);
}
实现类A,全场打八折
public class ConcreteStrategyA implements Charge{
@Override
public double Cash(Integer price, Integer num) {
//全场8折策略
//这里打折数写死了,实际应该通过参数传入
return price * num * 0.8;
}
}
实现类B,全场满减
public class ConcreteStrategyB implements Charge {
@Override
public double Cash(Integer price, Integer num) {
//满100减20策略
//这边写死了,同样满减策略也应由参数传入
Integer totle = price * num;
if (totle > 100) {
totle = totle - 20;
}
return totle;
}
}
包装类
精华的地方来了,包装类的封装
public class Content {
private Charge charge;
public Content(Charge charge) {
this.charge = charge;
}
public double CashResult(Integer price, Integer num) {
return charge.Cash(price, num);
}
}
客户端使用
public static void main(String[] args) {
//全场打折策略
Content content = new Content(new ConcreteStrategyA());
double totalPay = content.CashResult(100, 4);
System.out.println(totalPay);
//满减策略
Content content2 = new Content(new ConcreteStrategyB());
double totalPay2 = content2.CashResult(100, 4);
System.out.println(totalPay2);
}
运行代码输出为
320.0
380.0
这样就可以灵活的使用不用的业务逻辑而不用复杂的判断了,骚的。
总结
策略模式好处已经很明了了,但是我觉得只有业务策略场景不多的情况可以这么做,要是相对复杂的那不得疯狂写实现类呀,哈哈溜了~