【设计模式】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。根据具体的应用场景将对应的策略传入上下文实现相应算法。

  通过策略模式使策略的定义、创建和使用解耦,需要添加新的策略时对已有策略不会产生任何影响,代码的可维护性和可扩展性得到提高。

猜你喜欢

转载自www.cnblogs.com/jiazhongxin/p/12785463.html