使用策略模式+工厂模式对接口进行分配处理。远离if else

2023-11-07

使用策略模式+工厂模式对接口进行分配处理。远离if else

背景:在项目中我们会遇到不同时间或者不同条件下,调用不同的方法或处理方式。因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为。再用工厂模式进行匹配对应的对象。

首先我们做一下功课温习一下策略模式和工厂模式

 

好的补充的知识已经补充好了我们来干了。

 

1.定义一个统一接口:NewOrOldMethodService

 

/**
 * 新旧方法选择的接口
 * 使用策略模式+工厂模式进行处理
 * 有助于后面接口新老接口替换和维护,远离可恶的if else
 *  @author 鼠飞文
 * @date 2020-04-07
 */
public interface NewOrOldMethodService {

    /**
     *  使用default 是为了反正有的接口方法没有新老接口,接口实现者不用必须实现这个接口方法
     * 获取数据
     * @return
     */
       default String findExceptionList(String param) {
        return null;
    };
}

2.创建一个类ExceptionOldServiceImpl实现NewOrOldMethodService接口

 

@Service
@Slf4j
public class ExceptionOldServiceImpl implements NewOrOldMethodService {


    /**
     * 这里是老接口实现方法
     *
     */
    @Override
    public String findExceptionList(String param) {
       
        return "这里是老接口实现方法";
    }

}

3.创建一个类ExceptionNewServiceImpl实现NewOrOldMethodService接口

@Service
@Slf4j
public class ExceptionNewServiceImpl implements NewOrOldMethodService {


    /**
     * 这里是新接口实现方法
     *
     */
    @Override
    public String findExceptionList(String param) {
       
        return "这里是新接口实现方法";
    }

}

 

4.先创建一个bean类似于工厂模式:NewOrOldMethodFactoryService

 

/**
 *  工厂模式
 *  @date 2020-04-07
 */
@Component
public class NewOrOldMethodFactoryService {

    /**
     * 新的接口
     */
    @Autowired
    private   ExceptionNewServiceImpl exceptionNewServiceImpl;

    /**
     * 老的接口
     */
    @Autowired
    private  ExceptionOldServiceImpl exceptionOldServiceImpl;

    /**
     * 接口表
      */
    public static final Map<Boolean, NewOrOldMethodService> map = new HashMap<>();

    /**
     * 在benan注入的时候
     * 接口注册
     */
    @PostConstruct
    public void init() {
        map.put(true,exceptionNewServiceImpl);
        map.put(false, exceptionOldServiceImpl);
    }

    /**
     * 获取对应的接口
     * @param medalType
     * @return
     */
    public  NewOrOldMethodService getService(boolean medalType) {
        return map.get(medalType);
    }
}

 

5.调用者只需要调用工厂类接口实现接口的半自动匹配

 

@Service
public class WmsExceptionServiceImpl implements WmsExceptionService {

   @Autowired
    private NewOrOldMethodFactoryService newOrOldMethodFactoryService;


      /**
     * 通过设置ture就可以自动分配到新的接口中
     * @param param 参数
     * @return
     */
   @Override
    public String findNewExceptionList(String param) {
     return  newOrOldMethodFactoryService.getService(true).findExceptionList(param);
    }



}

 

 

好了上面的案例已经写完了,如果有缺陷可以来踢

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用策略模式+工厂模式对接口进行分配处理。远离if else 的相关文章

  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 如何使用正则表达式验证 1-99 范围?

    我需要验证一些用户输入 以确保输入的数字在 1 99 范围内 含 这些必须是整数 Integer 值 允许前面加 0 但可选 有效值 1 01 10 99 09 无效值 0 007 100 10 5 010 到目前为止 我已经制定了以下正则
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 如何通过 Android 按钮单击运行单独的应用程序

    我尝试在 Android 应用程序中添加两个按钮 以从单独的两个应用程序订单系统和库存系统中选择一个应用程序 如图所示 我已将这两个应用程序实现为两个单独的 Android 项目 当我尝试运行此应用程序时 它会出现直到正确选择窗口 但是当按
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Play.application() 的替代方案是什么

    我是 Play 框架的新手 我想读取conf文件夹中的一个文件 所以我用了Play application classloader getResources Data json nextElement getFile 但我知道 play P
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • 使用Java绘制维恩图

    我正在尝试根据给定的布尔方程绘制维恩图 例如 a AND b AND c我想在 Android 手机上执行此操作 因此我需要找到一种使用 Java 来执行此操作的方法 我找到了一个完美的小部件 它可以完成我在这方面寻找的一切布尔代数计算器
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 源值 1.5 的错误已过时,将在未来版本中删除

    我使用 scala maven plugin 来编译包含 scala 和 java 代码的项目 我已经将源和目标设置为1 7 但不知道为什么maven仍然使用1 5 这是我在 pom xml 中的插件
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • try-with-resources 中出现死代码警告,但翻译后的 try-catch-finally 中没有出现死代码警告

    以下代码使用try 有资源 https docs oracle com javase specs jls se7 html jls 14 html jls 14 20 3Java 8 中引入的构造 偶尔抛出 方法被声明为抛出一个偶尔的异常
  • 如何使用通配符模拟泛型方法的行为

    我正在使用 EasyMock 3 2 我想基于 Spring Security 为我的部分安全系统编写一个测试 我想嘲笑Authentication http docs spring io autorepo docs spring secu
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • Lan8720 网线插拔状态检测

    目的 能够实时的检测网线的插拔状态 并能够根据网线的插拔状态通知到到应用层 让应用层做相应的处理 1 解决问题的根本方法就是看lan8720的数据手册 如果说你用过一款芯片 而没有去研究过它的数据手册时 可以说你没有用过这个芯片 在Lan8
  • 条款20:当std::shared_ptr可能悬空时使用std::weak_ptr

    自相矛盾的是 如果有一个像std shared ptr 见条款19 的但是不参与资源所有权共享的指针是很方便的 换句话说 是一个类似std shared ptr但不影响对象引用计数的指针 这种类型的智能指针必须要解决一个std shared
  • 《算法:第四版》课后练习 1.1 答案

    以下答案纯属个人愚见 作为IT新手 算法代码中难免有逻辑漏洞和其他不足之处 欢迎朋友你点评拍砖 交流争辩能极大开阔思维 愿一起加油进步 1 1 19 在计算机上运行以下程序 1 public class Fibonacci 2 3 publ
  • springboot集成RedisTemplate

    RedisTemplate使用 基本信息 Maven依赖 yml配置文件 redisConfig配置类 Redis操作string Redis操作list 基本信息 spring 封装了 RedisTemplate 对象来进行对redis的
  • c语言间接级别不同_间接寻址不同问题?求解决!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 错误18error C2040 FineStu Student int 与 int 的间接寻址级别不同e vs study study study c1441Study include incl
  • python 基本概念整理

    一 简介 1 基本概念 Python 是一个高层次的结合了解释性 编译性 互动性和面向对象的脚本语言 Python 的设计具有很强的可读性 相比其他语言经常使用英文关键字 其他语言的一些标点符号 它具有比其他语言更有特色语法结构 Pytho
  • post和get调用API接口的优势分享和实例

    post和get调用API接口 POST和GET都是HTTP协议中的方法 用于客户端向服务器发送请求并获取响应 在调用API接口时 一般使用GET或POST方法 GET方法是通过URL向服务器请求资源的一种方法 在URL中 请求参数会被编码
  • vue3.0之-watch全面解析

    1 监听ref 创建的基本数据类型 栗子1 监听多个数据
  • OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and

    OpenJDK 64 Bit Server VM warning Options Xverify none and noverify were deprecated in JDK 13 and will likely be removed
  • Anaconda下载与安装详解

    第一步 进入官网下载符合自己电脑版本的anaconda 官网地址 https www anaconda com products distribution 其它版本 下拉最后 如图所示 第二步 双击打开下载好的安装文件 如图所示 点击 Ne
  • KNN分类算法原理及其Matlab实现

    KNN算法原理 K近邻算法是一种简单的监督学习算法 对于给定测试样本 直接计算该样本和训练集的距离 将距离最近的k个 邻居 点的类别作为参考 作为预测结果返回 测试数据 测试数据来自林智仁的分类任务数据集 链接 https www csie
  • 想在Android应用程序中将XLS文件转换为PDF吗?看完这篇教程就懂了

    在各种情况下 您可能需要通过Internet共享Excel文件 为避免篡改 最佳做法是在共享之前将这些文件转换为PDF格式 因此 在本文中 将学习如何在Android应用程序中将Excel XLSX或XLS文件转换为PDF 另外 还将讨论E
  • Svelte 实现 keypress 快捷键功能

    有些框架中内置了常用的事件修饰符和按键修饰符 例如 Vue 中就提供了按键 enter 13 修饰键 ctrl alt shift meta等修饰符 简化了很多快捷键功能的实现 在 Svelte 中也提供了 preventDefault s
  • C++ stack容器

    C stack容器 1 stack容器的基本概念 2 stack容器的创建 stack 默认构造函数 创建一个空的 stack 对象 例如 下面一行代码使用默认的 deque 为底层容器 创建一个空的堆栈对象 s stack
  • 扫雷

    扫雷 扫雷游戏是晨晨和小璐特别喜欢的智力游戏 她俩最近沉迷其中无法自拔 该游戏的界面是一个矩阵 矩阵中有些格子中有一个地雷 其余格子中没有地雷 游戏中 格子可能处于己知和未知的状态 如果一个己知的格子中没有地雷 那么该 格子上会写有一个一位
  • 计算机网络---TCP/IP网络编程实验

    文章目录 计算机网络 TCP IP网络编程实验 一 实验目的 二 实验环境和任务 三 实验步骤及实验结果记录 四 实验结果分析和总结 计算机网络 TCP IP网络编程实验 一 实验目的 掌握TCP IP协议的基本知识 TCP IP协议的基本
  • 2023秋招,软件测试面试八股文(有答案版),金九银十季,涨薪涨薪

    最近呢有很多的小伙伴问我有没有什么软件测试的面试题 由于笔者之前一直在忙工作上的事情 没有时间整理面试题 刚好最近休息了一下 顺便整理了一些面试题 现在就把整理的面试题分享给大家 希望可以帮助到各位 废话就不多说了直接上干货 Tip 我整理
  • jQuery插件开发全解析,jQuery.extend , (function($){ , $.fn.pluginName

    序 匿名函数 匿名函数没有实际名字 也没有指针 怎么执行滴 其实大家可以看看小括号的意义就应该可以理解 小括号有返回值 也就是小括号内的函数或者表达式的返回值 所以说小括号内的function返回值等于小括号的返回值 不难理解 functi
  • Python for循环的使用

    一 for循环的使用场景 1 如果我们想要某件事情重复执行具体次数的时候可以使用for循环 2 for循环主要用来遍历 循环 序列 集合 字典 文件 甚至是自定义类或函数 二 for循环操作列表实例演示 使用for循环对列表进行遍历元素 修
  • 使用策略模式+工厂模式对接口进行分配处理。远离if else

    使用策略模式 工厂模式对接口进行分配处理 远离if else 背景 在项目中我们会遇到不同时间或者不同条件下 调用不同的方法或处理方式 因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为 再用工厂模式进行匹配对应的对象 首先我们做