模式简介
-
策略模式用来封装一组可以互相替代的算法族,并可以根据需要动态切换
-
策略模式的角色
策略接口:所有策略的父接口
策略实现类:策略的各种实现
策略上下文:持有策略实例,利用该实例做事
模式实现
-
支付策略接口
public interface PayStrategy { void pay(); } -
策略实现类
// 支付宝支付 public class AliPay implements PayStrategy { @Override public void pay() { System.out.println("ALIPAY"); } } // 微信支付 public class WeChatPay implements PayStrategy { @Override public void pay() { System.out.println("WECHATPAY"); } } -
策略上下文
public class PayContext { private final PayStrategy pay; public PayContext(PayStrategy pay) { this.pay = pay; } public void doPay() { pay.pay(); } } -
测试
public class StrategyPatternTest { @Test public void test() { PayContext context = new PayContext(new AliPay()); context.doPay(); } } // ALIPAYUML
应用场景
-
当某个功能的实现可以有多种选择,并且交由客户端选择时,可以使用策略模式进行解耦
-
策略模式和简单工厂有些类似,不过简单工厂偏向于对象的创建,向客户端屏蔽创建细节,策略模式更偏向于多种算法的切换,由策略上下文执行策略
-
应用举例
JDK:java.util.Comparator#compare()