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

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

  • 相关阅读:
    android gradle 多渠道打包
    Gradle Plugin User Guide 中文版
    最好的JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
    ANDROID 中UID与PID的作用与区别
    HTTP Header 详解
    HTTP协议详解
    Volatile总结
    Condition-线程通信更高效的方式
    JAVA基础知识点(转载的)
    CountDownLatch和CyclicBarrier的区别
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12785463.html
Copyright © 2011-2022 走看看