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

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

    返回目录

    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    守护进程的创建(syslog函数)
    进程控制fork vfork,父子进程,vfork保证子进程先运行
    进程概述,父子进程
    gdb调试分析多线程死锁
    tcp握手
    实现自己的ls命令
    获取当前目录getcwd,设置工作目录chdir,获取目录信息
    目录的创建,删除,获取当前目录
    文件的移动,删除 rename remove unlink 函数
    sendkeys
  • 原文地址:https://www.cnblogs.com/javammc/p/14965506.html
Copyright © 2011-2022 走看看