美文网首页
策略设计模式

策略设计模式

作者: 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