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图是一样的。

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

    返回目录

    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    SpringBoot页面访问处理
    体验SpringBoot
    体验SpringBoot
    Scala基础
    修改容器配置使其永久生效
    [徐培成系列实战课程]docker篇
    v1.0.2-2017.04.26
    修改容器的hosts文件
    配置spark集群
    配置docker容器上ssh无密登录
  • 原文地址:https://www.cnblogs.com/javammc/p/14965506.html
Copyright © 2011-2022 走看看