本文最后更新于:2022年7月12日 下午
概览:策略模式
策略模式
策略模式: 定义一系列的算法
, 把它们一个个封装起来
, 并且使它们可相互替换
。 本模式使得算法可独立于使用它的客户而变化。
参考链接:https://www.jianshu.com/p/3ea48ecd7178
案例:支付方式,例如一个支付可以使用支付宝支付、也可以使用微信支付。
最直接的做法:if else,但是一旦业务复杂了,这样的代码就很难维护。
定义接口
1 2 3 4 5 6
| interface Payment{ PayType getPayType(); PayState pay(PayContext, int amount); }
|
支付类型
1 2 3 4
| enum PayType{ ALI_PAY, WECHAT_PAY; }
|
支付宝支付
1 2 3 4 5 6 7 8 9 10
| public class AliPay implement Payment{ public PayType getPayType(){ return PayType.ALI_PAY; } public PayState pay(PayContext, int amount){ return payState; } }
|
微信支付
1 2 3 4 5 6 7 8 9 10
| public class WxPay implement Payment{ public PayType getPayType(){ return PayType.WECHAT_PAY; } public PayState pay(PayContext, int amount){ return payState; } }
|
使用
1 2 3 4 5 6 7 8 9 10
| public static void main(String[] args){ Map<PayType,Payment> map = new HashMap(){{ put(PayType.WECHAT_PAY,new AliPay()); put(PayType.WECHAT_PAY,new WxPay()); }}; Payment payment = map.get(payContext.getType()); payment.pay(payContext,100); }
|
结合Spring依赖注入 的策略模式
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Service public class PaymentFactory { @Autowired private List<Payment> paymentList;
public Payment getPayment(PayType type) { } }
|
- 也可以注入到map集合之中
- 或者使用@PostConstruct注解,放入一个map集合之中。
参考链接:如何在 Spring 环境下优雅的实现策略模式 - 知乎 (zhihu.com)