• 设计模式-策略模式


    1.什么是策略模式

      在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

    注:与状态模式的比较

    状态模式的类图和策略模式类似,并且都是能够动态改变对象的行为。但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。所谓的状态转移,是指 Context 在运行过程中由于一些条件发生改变而使得 State 对象发生改变,注意必须要是在运行过程中。

    状态模式主要是用来解决状态转移的问题,当状态发生转移了,那么 Context 对象就会改变它的行为;而策略模式主要是用来封装一组可以互相替代的算法族,并且可以根据需要动态地去替换 Context 使用的算法

    2.代码实现

      

    Strategy.java
    public interface Strategy {
       public int doOperation(int num1, int num2);
    }
    
    
    OperationAdd.java
    public class OperationAdd implements Strategy{
       @Override
       public int doOperation(int num1, int num2) {
          return num1 + num2;
       }
    }
    
    OperationSubstract.java
    public class OperationSubstract implements Strategy{
       @Override
       public int doOperation(int num1, int num2) {
          return num1 - num2;
       }
    }
    
    Context.java 文件改为:
    public class Context {
       private Strategy strategy;
     
       public Context(){
          
       }
    
       public SetStrategy(Strategy strategy){
          this.strategy = strategy;
       }
    
       public int executeStrategy(int num1, int num2){
          return strategy.doOperation(num1, num2);
       }
    }
    
    调用改为:
    public static void main(String[] args) {
          Context context = new Context();    
          context.SetStrategy(new OperationAdd());    
          System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
          context.SetStrategy(new OperationSubstract());    
          System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
          context.SetStrategy(new OperationMultiply());          System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
  • 相关阅读:
    系统架构得11个原则
    深圳变更企业法人
    Mixpanel可以做些什么?
    jira tikcet 过滤版本
    Math.random().toString(36)使用 随机生成数字与字母的组合
    javascript多个等号含义
    登陆dev,AWS需要sso,ip到白名单
    MobSDK已停止支持非严格模式版本,请按上面编译告示接入合规版本!
    thinkphp 变量修饰符
    wsl 关闭 命令
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11699065.html
Copyright © 2020-2023  润新知