精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

三歪手把手教你干掉if else

開發 前端
今天想來跟大家討論一下怎么干掉if else。已經工作的人可能深有體會:沒有什么是if else搞不掂的,如果有,那就再嵌套一層。

 [[332944]]

本文轉載自微信公眾號「Java3y」,作者Java3y。轉載本文請聯系Java3y公眾號。

今天想來跟大家討論一下怎么干掉if else。

已經工作的人可能深有體會:沒有什么是if else搞不掂的,如果有,那就再嵌套一層。

大多數人都是做業務開發的,if else是避免不了的,但怎么讓if else的邏輯看起來更順眼,變得更加好看,更加好維護呢?

如果之前看過三歪文章的同學可能就會想到「責任鏈模式」。

沒錯就是 責任鏈模式

當你看到一個Service中有一大堆if else 邏輯的時候,可能你會幻想著要不要重構掉,但是始終下不了手。

所以,今天想來分享一個「通用」的責任鏈模式的模板,把if else給套進去就完事了,我相信都能學會。

之前寫設計模式文章的時候,有的同學會評論說我把東西搞復雜了,本來就有簡單的方式去弄,為啥就要嵌套這么多層去搞這些花里胡哨的東西。

在我看來,用最簡單的方式去實現是沒有任何問題的。但達到一定代碼量的時候,多想想一下,換一個人去維護,人家能不能看懂,有沒有更加好的方式,這往往就需要「抽象」的能力。

這也是為什么這么多人推崇設計模式的原因。

不多BB,來吧。

責任鏈通用實現

現在我就默認大家都知道什么是責任鏈模式了,如果還對這個不懂的同學,可以先看看我之前的文章。

 

首先,我們會有一個業務執行器接口,所有的業務實現都會實現該接口,這意味著上圖的邏輯A、B、C都會實現這個接口

  1. /** 
  2.  * 業務執行器 
  3.  * @author 三歪 
  4.  */ 
  5. public interface BusinessProcess { 
  6.     void process(ProcessContext context); 

可以看到的是接口異常的簡單,只有一個process處理的方法,方法接收的是ProcessContext

為什么process方法需要接收ProcessContext?很簡單,我們在處理邏輯A、B、C的時候,可能邏輯B需要依賴邏輯A的處理結果。于是我們就需要有一個載體把這些給記錄下來。

所以,我們就有了ProcessContext,它代表的是責任鏈的上下文。

  1. /** 
  2.  * 責任鏈上下文 
  3.  * @author 3y 
  4.  */ 
  5. public class ProcessContext { 
  6.     // 標識責任鏈的code 
  7.     private String code; 
  8.     // 存儲上下文的真正載體 
  9.     private Model model; 
  10.     // 責任鏈中斷的標識 
  11.     private Boolean needBreak = false

現在責任鏈的執行器和責任鏈所涉及的上下文都已經有了,這意味著我們已經有了責任鏈最主要的抽象了。

接下來就是我們需要把鏈給串起來,于是我們需要一個模板,其實我們做的就是用一個List來把BusinessProcess的子類給串起來。

  1. /** 
  2.  * 業務執行模板(把責任鏈的邏輯串起來) 
  3.  * @author 3y 
  4.  */ 
  5. public class ProcessTemplate { 
  6.     private List<BusinessProcess> processList; 
  7.     public List<BusinessProcess> getProcessList() { 
  8.         return processList; 
  9.     } 
  10.     public void setProcessList(List<BusinessProcess> processList) { 
  11.         this.processList = processList; 
  12.     } 

OK,現在我們已經把責任鏈的整塊給抽象好了,接下來就是暴露流程控制器去執行這個責任鏈:

  1. /** 
  2.  * 責任鏈的流程控制器(整個責任鏈的執行流程通用控制) 
  3.  * @author 3y  
  4.  */ 
  5. @Data 
  6. public class ProcessController { 
  7.      
  8.     // 不同的code 對應不同的責任鏈 
  9.     private Map<String, ProcessTemplate> templateConfig = null
  10.  
  11.     public void process(ProcessContext context) { 
  12.         //根據上下文的Code 執行不同的責任鏈 
  13.         String businessCode = context.getCode(); 
  14.         ProcessTemplate processTemplate = templateConfig.get(businessCode); 
  15.         List<BusinessProcess> actionList = processTemplate.getProcessList(); 
  16.         //遍歷某個責任鏈的流程節點 
  17.         for (BusinessProcess action : actionList) { 
  18.             try { 
  19.                 action.process(context); 
  20.                 if (context.getNeedBreak()) { 
  21.                     break; 
  22.                 } 
  23.             } catch (Exception e2) { 
  24.                 //... 
  25.             } 
  26.         } 
  27.     } 

我們可以看到的是在ProcessController執行鏈通用的流程控制器上會有一個Map去存儲多個責任鏈的模板,這樣做的好處就是:ProcessController這個流程控制器可以根據code支持多個責任鏈執行。

接下來就是我們有具體的BusinessProcess去加入到ProcessTemplate的鏈上,然后調用ProcessController的方法去執行整一條推送鏈。

一般我們在XML注入就好了,比如說現在我們有兩個BusinessProcess的實現,分別是白名單和發消息的邏輯:

  1. /** 
  2.  * 白名單處理器 
  3.  * @author 3y 
  4.  */ 
  5. @Service 
  6. public class WhiteListProcess implements BusinessProcess { 
  7.     @Override 
  8.     public void process(ProcessContext context) { 
  9.         UserModel user = (UserModel) context.getModel(); 
  10.         if ("3y".equals(user.getName())) { 
  11.             context.setNeedBreak(true); 
  12.         } 
  13.     } 
  14.  
  15. /** 
  16.  * 發消息處理器 
  17.  * @author 三歪 
  18.  */ 
  19. @Service 
  20. public class SendMessageProcess implements BusinessProcess { 
  21.  
  22.     @Override 
  23.     public void process(ProcessContext context) { 
  24.         UserModel user = (UserModel) context.getModel(); 
  25.         System.out.println("給"+user.getName()+"發消息"); 
  26.     } 

然后我們把上面兩個處理器添加到ProcessTemplate的模板上,把ProcessTemplate添加到ProcessController的Map上:

  1. <!--發送消息的責任鏈--> 
  2. <bean id="sendMessageTemplate" class="com.chainofresponsibility.ProcessTemplate"
  3.   <property name="processList"
  4.     <list> 
  5.       <ref bean="whiteListProcess"></ref> 
  6.       <ref bean="sendMessageProcess"></ref> 
  7.     </list> 
  8.   </property> 
  9. </bean> 
  10.  
  11. <!--通用流程處理器,維護多條責任鏈--> 
  12. <bean id="processController" class="com.chainofresponsibility.ProcessController"
  13.   <property name="templateConfig"
  14.     <map> 
  15.       <entry key="sendMessage" value-ref="sendMessageTemplate" /> 
  16.     </map> 
  17.   </property> 
  18. </bean> 

然后我們在接口里邊執行這個責任鏈:

  1. @RestController 
  2. public class UserController { 
  3.     @Autowired 
  4.     private ProcessController processController; 
  5.  
  6.     @RequestMapping("/send"
  7.     public void  send(String userName) { 
  8.         // 構建上下文 
  9.         ProcessContext processContext = new ProcessContext(); 
  10.  
  11.         UserModel userModel = new UserModel(); 
  12.         userModel.setAge("24"); 
  13.         userModel.setName(userName); 
  14.         processContext.setModel(userModel); 
  15.  
  16.         processContext.setCode("sendMessage"); 
  17.  
  18.         processController.process(processContext); 
  19.     } 

我做了這么大的一套東西實現了什么功能?其實就一個if邏輯:

  1. if ("3y".equals(userModel.getName())) { 
  2.   return
  3. System.out.println("給" + userModel.getName() + "發消息"); 

下面我們還是來看看效果,從功能上我們可以發現,只要我們輸入的不是「3y」,那就會打印消息

 

上面的邏輯,實際上就是一套通用的責任鏈的代碼,最核心的其實就是四個角色:「業務抽象接口」、「執行過程中的上下文」、「將業務實現類串起來」和「一個通用的控制器執行責任鏈」

 

如果沒看懂的同學,三歪建議再對比一下代碼看看,責任鏈這種設計模式是非常好用,在項目里邊也是非常常見的。

只要把BusinessProcess/ProcessContext/ProcessTemplate/ProcessController的代碼給拷過去自己的項目中,這就能幫你把原有的if else邏輯給干掉。

Pipeline

不知道大家看過Pipeline這個詞了沒,在學Redis的時候可能會見過,在Redis里邊我們會用Pipeline去做批量的操作。

拋開Redis的Pipeline,但從宏觀的角度上來,Pipeline其實是一種架構思想。

同時我也認為它是「責任鏈模式」的實現之一。

下面來看看我這邊的一個Pipeline實現的架構圖:

 

可以看到前人實現的Pipepline還是相對復雜的,沒有上面通用的責任鏈模式好理解,經過分析可以看到都是換湯不換藥的。

下次再見到Pipeline這個詞的時候(因為這個詞還是很常見的),你們就應該能想到責任鏈模式,然后你就發現你看懂了。

代碼GitHub:https://github.com/ZhongFuCheng3y/Java3yTestReposity

 

責任編輯:武曉燕 來源: Java3y
相關推薦

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2011-01-10 14:41:26

2021-07-14 09:00:00

JavaFX開發應用

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統調用

2009-11-09 14:57:37

WCF上傳文件

2024-10-16 11:40:47

2016-04-27 09:49:16

用戶模型產品總結

2020-04-14 10:20:12

MySQL數據庫死鎖

2022-01-17 07:50:37

Linux Patch項目

2011-01-06 10:39:25

.NET程序打包

2011-03-25 12:45:49

Oracle SOA

2021-08-04 08:55:02

Socket Java開發
點贊
收藏

51CTO技術棧公眾號

成人激情黄色小说| 亚洲精品乱码| 欧美v亚洲v综合ⅴ国产v| 日韩极品视频在线观看| 日韩性xxxx| 男女激情视频一区| 国内揄拍国内精品少妇国语| xxxxx在线观看| 国产专区精品| 一本到三区不卡视频| 亚洲高潮无码久久| 欧美精品久久久久久久久久丰满| 国模娜娜一区二区三区| 欧美亚洲国产视频小说| 一区二区在线观看免费视频| 国产精品一区高清| 精品国产露脸精彩对白| 免费一区二区三区在线观看| 高清视频在线观看三级| 亚洲欧美日韩一区二区| 日韩在线国产| 天天摸天天干天天操| 国产精品一品二品| 国产精品女主播视频| 亚洲另类欧美日韩| 狠狠色丁香久久综合频道| 伊人久久五月天| 人妻丰满熟妇aⅴ无码| 精品一区二区三区在线观看视频| 在线免费观看成人短视频| 你真棒插曲来救救我在线观看| 三级外国片在线观看视频| 91麻豆6部合集magnet| 91视频最新| 国产伦精品一区二区三区四区 | 国产精品天天摸av网| 精品视频免费观看| 免费观看国产精品| 成人性生交大片免费看中文 | 日本免费一区视频| 成人综合激情网| 亚洲自拍偷拍福利| 99国产精品欲| 国产一区二区三区免费看| 国产精品极品美女在线观看免费| 久久免费激情视频| 国产视频一区免费看| 韩国国内大量揄拍精品视频| 精品无码久久久久久久| 精品96久久久久久中文字幕无| 久久久国产一区| 欧美福利在线视频| 天天操综合网| 久久精品国产久精国产思思| www.xx日本| 欧美r级电影| 日韩视频在线免费| 污污的视频在线免费观看| 天天综合网91| 久久国产加勒比精品无码| 欧美 日韩 国产 一区二区三区| 91精品亚洲| 欧美人成在线视频| 国产第一页在线播放| 亚洲精品乱码| 国产精品福利网站| 91麻豆成人精品国产免费网站| 久久97超碰国产精品超碰| 成人免费视频网| 亚洲AV无码乱码国产精品牛牛| 国产99久久久国产精品免费看| 国产精品18毛片一区二区| 亚洲av成人精品一区二区三区在线播放| 不卡的av电影| 欧美在线视频二区| 国产一二区在线| 亚洲高清久久久| 干日本少妇首页| aaaa欧美| 精品久久久久久久久久久久包黑料 | 999在线观看视频| 在线看片国产福利你懂的| 欧美中文字幕一二三区视频| 午夜精品免费看| 动漫3d精品一区二区三区乱码| 日韩福利在线播放| 成人黄色短视频| 激情欧美日韩| 国产精品第3页| 性生活视频软件| 国产三级精品视频| www.男人天堂网| 亚洲美女久久精品| 欧美一区二区三区播放老司机| av黄色一级片| 欧美黄色大片在线观看| 97精品国产97久久久久久免费| 少妇久久久久久久| 国产成人aaa| 日韩欧美三级一区二区| 狂野欧美性猛交xxxxx视频| 日韩欧美有码在线| 四虎1515hh.com| 精品一区电影| 久久久久久久久综合| 夜夜躁很很躁日日躁麻豆| 成人动漫在线一区| 国产a级片免费看| 中文字幕在线视频网站| 欧美成人高清电影在线| 成熟人妻av无码专区| 亚洲美女毛片| 亚洲精品免费av| 成人在线免费电影| 日韩欧美在线观看视频| 香蕉在线观看视频| 91综合久久一区二区| 欧美尤物巨大精品爽| 国产国语亲子伦亲子| 国产精品热久久久久夜色精品三区| 日本福利视频在线观看| 成人黄色在线| 亚洲视频在线观看网站| 香蕉免费毛片视频| 国产成人8x视频一区二区| 夜夜爽99久久国产综合精品女不卡| 免费h视频在线观看| 欧美一级精品大片| 午夜激情福利网| 麻豆国产精品视频| 四虎永久在线精品免费一区二区| 樱花草涩涩www在线播放| 亚洲第一视频网| 久久激情免费视频| 国产精品亚洲第一区在线暖暖韩国 | 国产小视频免费观看| 亚洲欧美另类在线| 青娱乐精品在线| 亚洲综合专区| 91九色单男在线观看| 在线观看黄av| 欧美夫妻性生活| 精品亚洲乱码一区二区| 日韩电影在线观看电影| 欧美日韩精品免费观看视一区二区| 九色porny丨首页入口在线| 精品国产自在久精品国产| 欧美三级在线免费观看| 国产成人av电影| 精品丰满人妻无套内射| 黄色美女久久久| 97国产一区二区精品久久呦 | 亚洲一区二区三区在线免费 | 免费成人美女女| 亚洲欧美综合区自拍另类| 欧美一区二区三区网站| 欧美激情一区二区三区在线| 久久久精品麻豆| 欧美黄色大片在线观看| 亚洲一区中文字幕在线观看| 少女频道在线观看免费播放电视剧| 日韩亚洲欧美在线| 久久草视频在线| 91网站在线播放| 欧美精品无码一区二区三区| 成人免费电影网址| 成人免费在线视频网址| 牛牛精品在线| 日韩av在线电影网| 中文字幕久久网| 一区二区三区四区五区视频在线观看 | 极品国产91在线网站| 中文av字幕一区| 韩国三级与黑人| 亚洲精选国产| 亚洲v国产v| 一区二区三区免费在线看| 91av福利视频| 尤物在线视频| 亚洲成人精品视频| 无码人妻丰满熟妇精品| 亚洲猫色日本管| 成年人网站免费看| 极品销魂美女一区二区三区| 加勒比成人在线| 欧美中文一区二区| 99精品欧美一区二区三区| 欧美二三四区| 九九精品在线视频| 搞黄视频免费在线观看| 日韩欧美一级二级三级 | 制服丝袜亚洲播放| 日韩av在线天堂| 亚洲欧洲日韩女同| aaaaaav| 国产麻豆精品在线观看| 黄色三级视频片| 国产在线欧美| 亚洲一区二区三区免费看| 国产精品极品国产中出| 国产精品一区二区三区毛片淫片| 波多野结衣在线播放| 中文字幕久精品免费视频| 日韩一级片免费| 制服丝袜激情欧洲亚洲| 亚洲成人av影片| 亚洲成人在线观看视频| av黄色免费在线观看| 2020国产精品自拍| 丰满人妻一区二区三区53视频| 日本不卡的三区四区五区| 男人添女人下部高潮视频在观看| 99热在线成人| 日韩一区二区电影在线观看| 香蕉久久精品日日躁夜夜躁| 91网在线免费观看| 国产精品原创视频| 欧洲成人性视频| av影院在线| 久久久久久国产精品美女| 国产在线更新| www亚洲精品| 大片免费播放在线视频| 日韩av在线网| 十八禁一区二区三区| 日韩视频免费直播| 国产毛片毛片毛片毛片毛片| 欧美日韩在线播放三区| 黄色av网站免费| 黑人巨大精品欧美一区二区三区 | 日本道免费精品一区二区三区| 精品在线视频免费| 亚洲你懂的在线视频| 午夜激情福利电影| 国产精品视频第一区| 美女洗澡无遮挡| 久久亚洲二区三区| 久久人妻一区二区| av日韩在线网站| 国产精品一级黄片| 91毛片在线观看| 免费观看av网站| 久久久久久久久一| 性高潮久久久久久久 | 日韩高清dvd碟片| 国产精品久久网站| 久久国产高清视频| 国产精品久久久久久久第一福利| 一级黄色片网址| 国产精品沙发午睡系列990531| 欧美偷拍一区二区三区| 日本一区二区三区在线观看| 欧美黄色一级生活片| 国产日韩综合av| 91免费公开视频| 一二三区精品视频| 国产性70yerg老太| 狠狠做深爱婷婷久久综合一区 | 欧美人与z0zoxxxx视频| 一级特黄特色的免费大片视频| 91精品视频网| 亚洲成人黄色片| 亚洲精品久久久久中文字幕欢迎你 | 轻点好疼好大好爽视频| 亚洲视频中文| 少妇高潮喷水在线观看| 丝袜美腿亚洲一区二区图片| 久久99爱视频| 国产精品白丝jk黑袜喷水| 美女伦理水蜜桃4| 久久久久久久久久电影| 女人裸体性做爰全过| 亚洲特黄一级片| 日本熟妇一区二区| 在线观看免费亚洲| 国产chinasex对白videos麻豆| 亚洲аv电影天堂网| 欧美xxx.com| 久久久99免费视频| 爱搞国产精品| 成人国产精品久久久| 99精品在免费线中文字幕网站一区| 精品视频第一区| 色琪琪久久se色| 欧美综合在线播放| 日本中文一区二区三区| 亚洲精品一二三四| 国产校园另类小说区| 2025国产精品自拍| 丰满岳妇乱一区二区三区| 11024精品一区二区三区日韩| 日韩一区二区三区视频| 久久电影视频| 久久久久久999| 欧美一区=区三区| 精品欧美一区二区久久久伦 | 国产精品传媒视频| 色婷婷在线观看视频| 欧美日韩中文字幕精品| 色丁香婷婷综合久久| 俺去啦;欧美日韩| 成人免费高清观看| 国产欧美久久久久久| 伦理一区二区三区| 免费看黄色a级片| 日本不卡高清视频| 免费看黄色aaaaaa 片| 一区二区三区久久| 亚洲视频久久久| 精品亚洲国产视频| 日韩经典av| 成人在线小视频| 精品色999| 国产福利视频在线播放| 成人午夜电影网站| 糖心vlog免费在线观看| 欧美主播一区二区三区| 天堂成人在线| 国内精品小视频| 99精品中文字幕在线不卡| 91xxx视频| 久草在线在线精品观看| 国产熟女一区二区| 色综合一区二区| 无码国产精品高潮久久99| 高清欧美电影在线| 一区二区三区在线免费看| japanese在线视频| 九九**精品视频免费播放| 中文字幕av久久爽一区| 欧美性生交xxxxx久久久| 天天综合网天天综合| 久久理论片午夜琪琪电影网| 免费成人高清在线视频| 四虎影院一区二区三区 | 国产精品白丝jk白祙| 韩国自拍一区| 无码人妻丰满熟妇区毛片蜜桃精品 | 日韩精品一区二区三区蜜臀 | 欧美肥老太太性生活| 九九九在线观看视频| 国产精品色眯眯| 亚洲一区二区天堂| 久久精品国产综合| www久久久| 人妻无码一区二区三区四区| 久久精品国产99国产| 久久噜噜色综合一区二区| 欧美高清视频一二三区| av网站在线免费看推荐| 成人激情av| 亚洲美女毛片| 亚洲国产无码精品| 色婷婷av一区二区三区gif| 黄网站在线观看| 国产欧美精品久久久| 欧美一区二区三区另类| 免费观看一区二区三区| 香蕉影视欧美成人| 三级av在线播放| 国产精品欧美日韩久久| 91精品国产91久久久久久密臀| 少妇性l交大片7724com| 亚洲大片在线观看| 日本午夜在线视频| 国产美女精品免费电影| 欧美极品一区二区三区| 亚洲精品在线视频免费观看| 日韩欧美在线免费| 日本中文字幕在线播放| 91情侣在线视频| 美女网站久久| 黑人狂躁日本娇小| 亚洲国产精品999| 欧美性片在线观看| 99热这里只有精品免费| 久久久综合精品| 国产一区二区网站| 668精品在线视频| 四虎8848精品成人免费网站| 人妻 丝袜美腿 中文字幕| 欧美日韩在线视频一区| 在线免费看黄网站| www.成人av| 日本女优在线视频一区二区| 青青草手机视频在线观看| 亚洲人成电影在线播放| 综合久久伊人| 久久久久久久久久久视频| 亚洲欧美在线高清| 日韩av资源| 亚洲伊人久久大香线蕉av| 久久夜色精品| 欧美精品99久久久| 一区二区在线视频| 老司机aⅴ在线精品导航| 五月天中文字幕在线| 欧美视频在线看| 91麻豆免费在线视频| 视频一区不卡|