千家信息网

怎么干掉if else

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"怎么干掉if else",在日常操作中,相信很多人在怎么干掉if else问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么干掉if else"的疑惑
千家信息网最后更新 2026年11月03日怎么干掉if else

这篇文章主要介绍"怎么干掉if else",在日常操作中,相信很多人在怎么干掉if else问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么干掉if else"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

责任链通用实现

现在我就默认大家都知道什么是责任链模式了,如果还对这个不懂的同学,可以先看看我之前的文章。

首先,我们会有一个业务执行器接口,所有的业务实现都会实现该接口,这意味着上图的逻辑A、B、C都会实现这个接口

/**  * 业务执行器  * @author 三歪  */ public interface BusinessProcess {     void process(ProcessContext context); }

可以看到的是接口异常的简单,只有一个process处理的方法,方法接收的是ProcessContext

为什么process方法需要接收ProcessContext?很简单,我们在处理逻辑A、B、C的时候,可能逻辑B需要依赖逻辑A的处理结果。于是我们就需要有一个载体把这些给记录下来。

所以,我们就有了ProcessContext,它代表的是责任链的上下文。

/**  * 责任链上下文  * @author 3y  */ public class ProcessContext {     // 标识责任链的code     private String code;     // 存储上下文的真正载体     private Model model;     // 责任链中断的标识     private Boolean needBreak = false; }

现在责任链的执行器和责任链所涉及的上下文都已经有了,这意味着我们已经有了责任链最主要的抽象了。

接下来就是我们需要把链给串起来,于是我们需要一个模板,其实我们做的就是用一个List来把BusinessProcess的子类给串起来。

/**  * 业务执行模板(把责任链的逻辑串起来)  * @author 3y  */ public class ProcessTemplate {     private List processList;     public List getProcessList() {         return processList;     }     public void setProcessList(List processList) {         this.processList = processList;     } }

OK,现在我们已经把责任链的整块给抽象好了,接下来就是暴露流程控制器去执行这个责任链:

/**  * 责任链的流程控制器(整个责任链的执行流程通用控制)  * @author 3y   */ @Data public class ProcessController {          // 不同的code 对应不同的责任链     private Map templateConfig = null;      public void process(ProcessContext context) {         //根据上下文的Code 执行不同的责任链         String businessCode = context.getCode();         ProcessTemplate processTemplate = templateConfig.get(businessCode);         List actionList = processTemplate.getProcessList();         //遍历某个责任链的流程节点         for (BusinessProcess action : actionList) {             try {                 action.process(context);                 if (context.getNeedBreak()) {                     break;                 }             } catch (Exception e2) {                 //...             }         }     } }

我们可以看到的是在ProcessController执行链通用的流程控制器上会有一个Map去存储多个责任链的模板,这样做的好处就是:ProcessController这个流程控制器可以根据code支持多个责任链执行。

接下来就是我们有具体的BusinessProcess去加入到ProcessTemplate的链上,然后调用ProcessController的方法去执行整一条推送链。

一般我们在XML注入就好了,比如说现在我们有两个BusinessProcess的实现,分别是白名单和发消息的逻辑:

/**  * 白名单处理器  * @author 3y  */ @Service public class WhiteListProcess implements BusinessProcess {     @Override     public void process(ProcessContext context) {         UserModel user = (UserModel) context.getModel();         if ("3y".equals(user.getName())) {             context.setNeedBreak(true);         }     } }  /**  * 发消息处理器  * @author 三歪  */ @Service public class SendMessageProcess implements BusinessProcess {      @Override     public void process(ProcessContext context) {         UserModel user = (UserModel) context.getModel();         System.out.println("给"+user.getName()+"发消息");     } }

然后我们把上面两个处理器添加到ProcessTemplate的模板上,把ProcessTemplate添加到ProcessController的Map上:

                                                           

然后我们在接口里边执行这个责任链:

@RestController public class UserController {     @Autowired     private ProcessController processController;      @RequestMapping("/send")     public void  send(String userName) {         // 构建上下文         ProcessContext processContext = new ProcessContext();          UserModel userModel = new UserModel();         userModel.setAge("24");         userModel.setName(userName);         processContext.setModel(userModel);          processContext.setCode("sendMessage");          processController.process(processContext);     } }

我做了这么大的一套东西实现了什么功能?其实就一个if逻辑:

if ("3y".equals(userModel.getName())) {   return; } System.out.println("给" + userModel.getName() + "发消息");

下面我们还是来看看效果,从功能上我们可以发现,只要我们输入的不是「3y」,那就会打印消息

上面的逻辑,实际上就是一套通用的责任链的代码,最核心的其实就是四个角色:「业务抽象接口」、「执行过程中的上下文」、「将业务实现类串起来」和「一个通用的控制器执行责任链」

如果没看懂的同学,三歪建议再对比一下代码看看,责任链这种设计模式是非常好用,在项目里边也是非常常见的。

只要把BusinessProcess/ProcessContext/ProcessTemplate/ProcessController的代码给拷过去自己的项目中,这就能帮你把原有的if else逻辑给干掉。

Pipeline

不知道大家看过Pipeline这个词了没,在学Redis的时候可能会见过,在Redis里边我们会用Pipeline去做批量的操作。

抛开Redis的Pipeline,但从宏观的角度上来,Pipeline其实是一种架构思想。

同时我也认为它是「责任链模式」的实现之一。

下面来看看我这边的一个Pipeline实现的架构图:

到此,关于"怎么干掉if else"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

责任 逻辑 上下 上下文 就是 业务 接口 流程 处理 控制 控制器 方法 消息 接下来 模板 学习 不同 代码 处理器 模式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南真二互联网科技有限公司 北京互联网科技公司 智慧科技互联网 互联网科技logo设计 长亮科技互联网金融 互联网 科技服务平台 滨湖区互联网智能科技产品供应 中国科技互联网公司收入 中国的互联网科技企业的崛起 互联网科技教育视频 互联网科技项目计划书材料类 哈尔滨屹滨互联网科技有限公司 本届互联网博览会上的黑科技 锡山区互联网智能科技产品供应 互联网科技股为什么大涨 从那以后互联网科技有限公司 互联网时代科技型公司的机会 万物互联网智能科技 互联网大会出现的黑科技 互联网高科技绘画 广州大一互联网络科技有限公司 工业互联网科技新基建 狮子座互联网科技有限公司 互联网科技大会案例 四川互联网展示科技馆设计 江苏互联网科技小贷 互联网硬科技公司 互联网科技手抄报图片 科技发展第三阶段互联网时代 武汉亿视互联网科技有限公司
0