当前位置: 首页 > article >正文

java---->策略模式

实际项目中用到了,这里就记录一下~~
先来说一下策略模式优点,和使用场景,再来说一下我这个实际项目中怎么使用策略模式的!
👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌👌
策略模式优点:

①、算法可以自由切换
这是策略模式本身定义的, 只要实现抽象策略, 它就成为策略家族的一个成员, 通过封装角色对其进行封装, 保证对外提供“可自由切换”的策略。
②、避免使用多重条件判断
简化多重if-else,或多个switch-case分支。
③、扩展性良好
增加一个策略,只需要实现一个接口即可。

策略模式应用场景:

①、多个类只有在算法或行为上稍有不同的场景。
②、算法需要自由切换的场景。
③、需要屏蔽算法规则的场景。

java里面大多数设计模式说白了就是解耦合高扩展呗~这个策略模式也是。
看下策略模式主要的代码结构,后面再看我实际代码的结构:

用于封装,被主代码调用:
public class Context {
    // 抽象策略
    private Strategy strategy = null;
    // 构造函数设置具体策略
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    // 封装后的策略方法
    public void doAnything(){
        this.strategy.doSomething();
    }
}

注意这里是接口,后面不同的类实现这个接口来达到策略模式封装的效果:

public interface Strategy {
    // 策略模式的运算法则
    public void doSomething();
}

实现接口类1:

public class ConcreteStrategy1 implements Strategy{
    @Override
    public void doSomething() {
        System.out.println("ConcreteStrategy1");
    }
}

实现接口类2:

public class ConcreteStrategy2 implements Strategy{
    @Override
    public void doSomething() {
        System.out.println("ConcreteStrategy2");
    }
}

开始测试:

public class StrategyClient {
    public static void main(String[] args) {
        // 声明一个具体的策略
        Strategy strategy = new ConcreteStrategy1();
        // 声明上下文对象
        Context context = new Context(strategy);
        // 执行封装后的方法
        context.doAnything();
    }
}

以上代码就是代码策略模式通用代码了。

🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌
接下来展示我实际生产用到的策略模式:
这是一个流程相关内容。所有流程(假设有五个流程,每个流程的通过都会走这个方法,但不同流程的通过会产生不同的响应,如果用if-else来判断是那个流程,然后给不同的响应,那方法会有甚多代码,如果我把不同响应结果代码封装成不同的方法,这个类又会有很多方法,而且不直观。也会对二期的升级的增加造成困难,因为太耦合了。会在原本方法造成太多改动。这是不允许的。 于是选择了策略模式。)
下面贴上图片:

这是接口,用来接受service层的不同流程的调用:
在这里插入图片描述

这里把所有对应的流程赋予接口,最后一步进行接口调用:
在这里插入图片描述

这个是整体结构。最后一个是策略模式接口,剩下的是对接口的实现方法:
在这里插入图片描述

🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌结束🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌


http://www.kler.cn/a/536322.html

相关文章:

  • 大语言模型极速部署:Ollama 、 One-API、OpenWebUi 完美搭建教程
  • python:内置函数与高阶函数
  • 三维粒子滤波(Particle Filter)MATLAB例程,估计三维空间中匀速运动目标的位置(x, y, z),提供下载链接
  • 6 加密技术与认证技术
  • JavaScript前后端交互-AJAX/fetch
  • 【初阶数据结构和算法】八大排序算法之插入排序(直接插入排序、希尔排序及其对比)
  • Intellij IDEA如何查看当前文件的类
  • HTML之form表单学习
  • go结构体详解
  • 03-移除元素
  • leetcode:1897. 重新分配字符使所有字符串都相等(python3解法)
  • 开发板适配之UART
  • mybatisPlus介绍
  • Java 21 虚拟线程详解
  • 【C#】一维、二维、三维数组的使用
  • 测试中的第一性原理:回归本质的质量思维革命
  • 数据结构之顺序表和链表
  • s1:简单测试-时间规模化
  • Kotlin 使用虚拟线程并在低版本中自动切换到协程
  • zabbix v7.2.3容器运行Proxy代理服务器启用IPV6访问
  • 代码随想录算法【Day38】
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(6)
  • 第4节课:控制结构 - 条件语句、循环语句
  • 本地私有化部署 DeepSeek Dify ,告别“服务器繁忙,请稍后再试”
  • 小米官博宣布:首款AI眼镜即将发布
  • Java实现网络安全编程数字信封 网络安全 java