美文网首页
策略设计模式

策略设计模式

作者: s_j_x | 来源:发表于2018-10-23 08:27 被阅读0次

定义:定义算法族,分别封装起来,让他们之前可以相互替换,算法的变化独立于使用算法的客户
优点:策略类之间可以切换,由于策略类实现同一个抽象,所以他们之间可以自由切换
易于扩展,增加一个新的策略对策略模式来说非常容易,基本上可以在不改变原来代码的基础上进行扩展
避免使用多重条件
缺点: 维护各个策略类会给开发带来额外开销
必须对客户端(调用者) 暴露所有的策略类
模式适用场景:
1)许多相关的类仅仅是行为有异。
2)需要使用一个算法的不同变体。
3)算法使用客户不应该知道的数据。
4)一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。

public interface IPayStrategy{
      public void pay();//支付
}


public interface IPayStrategy{
      public void pay();//支付
}

public interface IPayStrategy{
      public void pay();//支付
}

public interface IPayStrategy{
      public void pay();//支付
}
//负责调度,执行入口的上下文 context
public class PayStrategyContext {
    private IPayStrategy payStrategy;
    public PayStrategyContext() {
    }
    /**
     * 执行支付
     */
    public void excutePay() {
        if (null == payStrategy) {
            throw new RuntimeException("支付策略未配置");
        }
        payStrategy.pay();
    }
    public IPayStrategy getPayStrategy() {
        return payStrategy;
    }
    public void setPayStrategy(IPayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }
}


public class MainTest {
    public static void main(String[] args) {
        //执行上下文
        PayStrategyContext payStrategyContext = new PayStrategyContext();
        IPayStrategy payStrategy = null;
        //1.支付宝支付
        payStrategy = new AliPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
        //2.微信支付
        payStrategy = new WexinPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
        //3.银联支付
        payStrategy = new EBankPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
    }
}

相关文章

网友评论

      本文标题:策略设计模式

      本文链接:https://www.haomeiwen.com/subject/rlknzftx.html