第一次感觉到深入浅出的书,读完之后,心中疑惑基本彻底明了。
场景描述:
系统支付环节,存在不同账户体系(不同第三方渠道),根据不同的账户对应的支付行为实现不一致,但是支付模式一致。
举例:
用户支付账户:
UserA A账户体系(易宝账户)
UserB B账户体系 (连连支付)
UserC C账户体系(联动优势)
对应订单:
Order_A,Order_B,Order_C
描述:
用户 A/B/C 购买理财产品后,分别产生订单 Order_A/Order_B/Order_C,每一笔订单都需要进行支付,由于ABC分别对应不同支付渠道的账户类型,总体模式一致,但是每个支付通道又具有各自的特殊处理,如果使用编程式实现,如果一家支付通道接口发生变更,公司产品跟随更改,改动一个地方所有的支付通道都会受到影响。
策略模式
使用策略模式可以有好的解决上述问题.
//模式超类 public abstract Order{ //支付行为 public PayBehavior payBehavior;(针对接口的编程) //支付动作 pbulic void pay(){ payBehavior.pay(); } //装载策略接口实现类对象 puoblic void setPayBehavior(PayBehavior payBehavior){ payBehavior = payBehavior } } 策略接口: public Interface PayBehavior { public void pay();//支付接口 } 策略接口实现: public class Apay implements PayBehavior { public void pay(){ sysout("A pay"); } } public class Bpay implements PayBehavior { public void pay(){ sysout("B pay"); } } public class Cpay implements PayBehavior { public void pay(){ sysout("C pay"); } } 策略对象: public class OrderPlot extends Order{ //正常进行构造即可 } 测试: public class Test{ public static void main(String[] args){ //构造策略对象 Order order = new OrderPlot(); //装载策略接口 order.setPayBehavior(new Apay()); //策略方法执行 order.pay(); } }