【设计模式】1.策略模式
策略模式
策略模式(Strategy Design Pattern)定义了算法族,每个算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。
结构图:
Strategy负责提供实现策略所需的接口;
ConcreteStrategy负责实现Strategy接口;
Context保存ConcreteStrategy实例,使用它来调用接口方法;
例:
public interface PayStrategy { // Strategy 接口(策略) void pay(BigDecimal money); }
public class UseAliPay implements PayStrategy { // Strategy 接口实现1(具体策略1) @Override public void pay(BigDecimal money) { System.out.println("use AliPay:" + money); } }
public class UseWeChatPay implements PayStrategy { // Strategy 接口实现2(具体策略2) @Override public void pay(BigDecimal money) { System.out.println("use WeChatPay:" + money); } }
public class PayContext { // 策略上下文 private BigDecimal money; private PayStrategy payStrategy; public PayContext(BigDecimal money, PayStrategy payStrategy) { this.money = money; this.payStrategy = payStrategy; } public void pay(){ payStrategy.pay(money); } }
public class Test { // 测试 public static void main(String[] args){ PayContext payContext; payContext = new PayContext(new BigDecimal(100),new UseAliPay()); payContext.pay(); payContext = new PayContext(new BigDecimal(200),new UseWeChatPay()); payContext.pay(); } }
输出: use AliPay:100 use WeChatPay:200
策略PayStrategy 提供一个pay接口,具体策略UseAliPay和UseWeChatPay是该策略的实现(实现了pay接口),上下文PayContextpayStrategy包含一个PayStrategy作为成员变量和一个pay方法的参数money。根据具体的应用场景将对应的策略传入上下文实现相应算法。
通过策略模式使策略的定义、创建和使用解耦,需要添加新的策略时对已有策略不会产生任何影响,代码的可维护性和可扩展性得到提高。