标签:first out pre ams 开放 adf 定义 actor err
策略模式
定义了算法族,分别封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。
使用场景
电商行业里的支付模式,一般分为银联、支付宝、微信,一种业务,多种实现方式,如果哪种发生变化
只要修改对应的实现即可,未来引入新的支付,例如积分支付,增加一个实现类,而不需要改变现有代码。
遵循原则
1. 开闭原则:对扩展开放,对修改关闭
2. 针对接口编程,而不是针对实现编程
示例:
package com.study.headfirst.strategy; /** * @author mdl * @date 2019/12/06 */ public interface Payment { /** * 发起支付 * * @param params */ public Object gotoPay(Object...params); /** * 支付回写 * * @param params */ public void notify(Object...params); }
package com.study.headfirst.strategy; /** * 支付宝 * * @author mdl * @date 2019/12/06 */ public class Alipay implements Payment{ /* (non-Javadoc) * @see com.study.headfirst.strategy.Payment#gotoPay(java.lang.Object[]) */ @Override public Object gotoPay(Object... params) { System.out.println("开始调用支付宝支付..."); return null; } /* (non-Javadoc) * @see com.study.headfirst.strategy.Payment#notify(java.lang.Object[]) */ @Override public void notify(Object... params) { // TODO Auto-generated method stub } }
package com.study.headfirst.strategy; /** * 微信支付 * * @author mdl * @date 2019/12/06 */ public class WechatPay implements Payment{ /* (non-Javadoc) * @see com.study.headfirst.strategy.Payment#gotoPay(java.lang.Object[]) */ @Override public Object gotoPay(Object... params) { System.out.println("开始调用微信支付..."); return null; } /* (non-Javadoc) * @see com.study.headfirst.strategy.Payment#notify(java.lang.Object[]) */ @Override public void notify(Object... params) { // TODO Auto-generated method stub } }
package com.study.headfirst.strategy; /** * @author mdl * @date 2019/12/06 */ public class PayFactory { private Payment payment; PayFactory(Payment payment){ this.payment = payment; } public Object gotoPay(Object... params) { payment.gotoPay(params); return null; } public void notify(Object... params) { payment.notify(); } }
编写测试类:
package com.study.headfirst.strategy; /** * @author mdl * @date 2019/12/06 */ public class Test { public static void main(String[] args) { // 这里只谈策略模式,学习了工厂模式之后,这里应设计成根据前端传入的支付类型 // 如 1 代表支付宝,2 代表微信,以此获取具体的支付方式,且此方法在PayFactory定义 PayFactory factory =new PayFactory(new Alipay()); factory.gotoPay(new Object[] {"1"}); factory =new PayFactory(new WechatPay()); factory.gotoPay(new Object[] {"2"}); } }
标签:first out pre ams 开放 adf 定义 actor err
原文地址:https://www.cnblogs.com/bloodthirsty/p/11993910.html