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

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

  • 相关阅读:
    Simulink仿真入门到精通(一) Simulink界面介绍
    Learn Regex The Easy Way
    C语言程序设计(十三) 文件操作
    C语言程序设计(十二) 结构体和共用体
    C语言程序设计(十一) 指针和数组
    C语言程序设计(十) 字符串
    C语言程序设计(九) 指针
    C语言程序设计(八) 数组
    C语言程序设计(七) 函数
    C语言程序设计(六) 循环控制结构
  • 原文地址:https://www.cnblogs.com/jiazhongxin/p/12785463.html
Copyright © 2011-2022 走看看