zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    策略模式

    定义:定义了一系列算法,并将每一个算法封装起来,而且他们之间还可以相互替换。

    注意解决多种算法相似的i情况下,使用if/else带来的复杂和难以维护。

    使用场景:1. 一个对象有很多行为,这些行为使用了多重条件选择语句实现。2.一个系统需要动态的在几种算法中选择一种。

    可以使用策略模式+工厂模式处理 ifelse过多的情况

    示例代码:

    public interface Strategy {
    
        int doOperation(int num1,int num2);
    }
    
    public class OperationAdd implements Strategy {
        @Override
        public int doOperation(int num1, int num2) {
            return num1+num2;
        }
    }
    
    public class OperationSubstract implements Strategy {
        @Override
        public int doOperation(int num1, int num2) {
            return num1-num2;
        }
    }
    
    public class Context {
    
        private Strategy strategy;
    
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }
    
        public int executeStraty(int num1, int num2){
            return strategy.doOperation(num1, num2);
        }
    }
    

    测试代码:

     public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
            Context context=new Context(new OperationAdd());
            int i = context.executeStraty(1, 5);
            System.out.println(i);
    
    
            context=new Context(new OperationSubstract());
            int i1 = context.executeStraty(40, 2);
            System.out.println(i1);
        }
    

    策略模式和状态模式的区别:

    为什么拿策略模式和状态模式比较呢?因为他们的UML图是一样的。

    但是策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换。一个策略就是一个计划方案,可以相互替代。状态整体构成一个流程,各个流程有一定的顺序。

    返回目录

    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    Angularjs演示Service功能
    初始化应用程序数据ng-init指令
    AngularJs的ng-include的使用与实现
    把视图转换为字符串
    学习angularjs的内置API函数
    AngularJs自定义过滤器filter
    ASP.NET MVC的切片(Section)脚本(script)
    在ASP.NET MVC部署AngularJs
    MS SQL的某一数据库成了Single User模式
    AngularJs的MVC模式
  • 原文地址:https://www.cnblogs.com/javammc/p/14965506.html
Copyright © 2011-2022 走看看