结构图
策略模式需要一个策略接口,不同的策略实现不同的实现类。
在具体业务环境中仅持有该策略接口,根据不同的场景使用不同的实现类即可。
面向接口编程,而不是面向实现。
策略模式的优点
- 干掉繁琐的 if、switch 判断逻辑;
- 代码优雅、可复用、可读性好;
- 符合开闭原则,扩展性好、便于维护;
策略模式的缺点
- 策略如果很多的话,会造成策略类膨胀;
- 使用者必须清楚所有的策略类及其用途;
实例
XX 公司是做支付的,根据不同的客户类型会有不同的支付方式和支付产品,比如:信用卡、本地支付,而本地支付在中国又有微信支付、支付宝、云闪付、等更多其他第三方支付公司,这时候策略模式就派上用场了。
定义策略接口
策略接口:所有支付方式的接口
1 | /** |
订单信息类:
1 | /** |
返回结果类:
1 |
|
定义各种策略
各种支付策略,微信支付、支付宝、云闪付等支付实现类都实现这个接口。
微信支付实现:
1 | "WechatPay") ( |
支付宝实现:
1 | "Alipay") ( |
云闪付实现:
1 | "UnionPay") ( |
使用策略
1 | /** |
测试
1 | http://localhost:8080/pay?amount=8800&paymentType=WechatPay |