精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美大片在线观看一区二区| 国产精品情趣视频| 91chinesevideo永久地址| wwwwww日本| 91丨精品丨国产| 亚洲国产成人av网| 亚洲国产精品久久久久婷婷老年| 精品人妻久久久久一区二区三区| 亚洲综合国产激情另类一区| 日韩在线视频观看正片免费网站| 无码任你躁久久久久久老妇| 成人午夜精品| 亚洲丶国产丶欧美一区二区三区| 日韩在线电影一区| 欧美一级在线免费观看| 蜜臀a∨国产成人精品| 久久久久久成人精品| 婷婷色一区二区三区| 2020最新国产精品| 欧美少妇xxx| 欧美在线观看www| 国产黄a三级三级三级av在线看 | 91超碰国产精品| 日韩国产精品亚洲а∨天堂免| 欧美大片久久久| www.成人影院| 亚洲大片精品永久免费| 黄色www在线观看| 大胆av不用播放器在线播放 | 亚洲专区一区| 色综合五月天导航| 免费在线观看a级片| 国产免费av一区二区三区| 亚洲精品一区二区在线观看| 国产乱码一区二区三区四区| 日韩不卡视频在线观看| 天天做天天摸天天爽国产一区| 久久久久久久久久久久久国产| 福利在线午夜| 国产日韩欧美精品综合| 裸模一区二区三区免费| 欧美一区二区三区成人片在线| 国产真实乱对白精彩久久| 国产精品无码专区在线观看| 精品国产午夜福利| 小嫩嫩精品导航| 91国产美女视频| 国产精品自拍视频一区| 欧美日本二区| 久久久久久久成人| 国产精品成人久久| 一本色道久久| 91成人精品网站| 国产日产精品一区二区三区| 国产毛片一区| 热99精品里视频精品| 青青青国产在线| 午夜在线视频一区二区区别| 欧美在线中文字幕| 亚洲精品男人的天堂| 免费看黄裸体一级大秀欧美| 热久久视久久精品18亚洲精品| 国产a∨精品一区二区三区仙踪林| 亚洲精品社区| 国产999视频| 中文字幕91爱爱| 精品夜夜嗨av一区二区三区| 97视频热人人精品| 色欲av永久无码精品无码蜜桃| 成人va在线观看| 农村寡妇一区二区三区| 搞黄视频免费在线观看| 亚洲视频精选在线| 欧美久久久久久久久久久久久久| 91超碰在线免费| 日韩欧美在线视频免费观看| www.欧美日本| 91国产精品| 亚洲成年人在线播放| 野外性满足hd| 91视频一区| 欧美激情在线一区| 人人爽人人爽人人片av| 久久成人av少妇免费| 5566av亚洲| 黄色在线小视频| 国产精品国产三级国产三级人妇| 欧美另类videosbestsex日本| av在线中出| 欧美日韩一区二区三区不卡| 亚洲精品福利资源站| 国产精品yjizz| 偷拍精品一区二区三区| 国产欧美一区视频| 亚洲五码在线观看视频| 亚洲欧美韩国| 欧美一区二区视频在线观看| 亚洲av无码一区二区三区观看| 日韩精品免费| 午夜精品福利在线观看| 亚洲专区第一页| 97久久久精品综合88久久| 亚欧洲精品在线视频免费观看| 女囚岛在线观看| 在线亚洲免费视频| 88av在线播放| 91精品啪在线观看国产81旧版| 欧美亚洲在线观看| 国产麻豆91视频| 97久久精品人人做人人爽| 麻豆av一区| 羞羞视频在线观看不卡| 日本高清无吗v一区| 免费观看一区二区三区| 久久资源中文字幕| 国产成人精品久久二区二区91| 国产成人毛毛毛片| 国产精品午夜在线观看| 国产男女无遮挡| 99re91这里只有精品| 伊人久久精品视频| 日韩综合在线观看| av午夜精品一区二区三区| 玖玖精品在线视频| 韩国精品视频在线观看| 亚洲欧美一区二区三区情侣bbw| 色在线观看视频| 极品少妇一区二区| 日韩欧美精品一区二区三区经典| 2020国产在线| 精品国产免费久久| 久久综合成人网| 国产精品主播直播| 欧洲金发美女大战黑人| 色综合视频一区二区三区44| 尤物yw午夜国产精品视频明星| 欧美在线观看不卡| 91蝌蚪porny| 女性女同性aⅴ免费观女性恋| 大桥未久女教师av一区二区| 欧美老妇交乱视频| 国产婷婷在线视频| 亚洲欧美另类小说视频| 国产永久免费网站| 91精品国产福利在线观看麻豆| 国产裸体写真av一区二区 | 中文字幕一精品亚洲无线一区| 91porny九色| 国产日韩成人精品| 日本激情综合网| 欧美hd在线| 91一区二区三区| 国产网红在线观看| 亚洲精品动漫久久久久| 久久艹免费视频| 国产日韩欧美精品电影三级在线| 十八禁视频网站在线观看| 色棕色天天综合网| 国产精品久久久久久久午夜| 免费在线视频欧美| 日韩一区二区免费在线观看| 男人天堂成人网| 国产精品99精品一区二区三区∴| 在线成人免费网站| 97久久人国产精品婷婷| 亚洲免费在线视频一区 二区| 韩国三级hd中文字幕有哪些| 亚洲性人人天天夜夜摸| 精品国产电影| 91精品国产经典在线观看| 日韩中文视频免费在线观看| 国产偷拍一区二区| 岛国精品视频在线播放| 丁香花五月婷婷| 国产一区二区在线电影| 国产一级爱c视频| 国产精品一区二区三区av麻| 91精品啪aⅴ在线观看国产| 七七久久电影网| 亚洲精品一区二区三区不| 中文字幕久久熟女蜜桃| 伊人一区二区三区| 亚洲永久精品ww.7491进入| 久久国产成人午夜av影院| 国产www免费| gogogo高清在线观看一区二区| 成人福利免费观看| 国产美女精品写真福利视频| 永久免费看mv网站入口亚洲| www.狠狠干| 色8久久精品久久久久久蜜 | 五月婷婷激情综合| 懂色av蜜桃av| 成人久久18免费网站麻豆| 国产无套粉嫩白浆内谢的出处| 91精品电影| 欧美一级日本a级v片| 欧洲一区在线| 国产精品久久一区| av成人影院在线| 久久精品国产亚洲精品2020| 天天综合天天综合| 7777精品伊人久久久大香线蕉的| 日韩污视频在线观看| 最新日韩在线视频| 亚洲a v网站| www.日本不卡| 两性午夜免费视频| 日韩av在线发布| 狠狠干 狠狠操| 综合天天久久| 婷婷亚洲婷婷综合色香五月| 成人爽a毛片| 成人精品久久av网站| 欧美不卡高清一区二区三区| 97国产精品视频| 亚洲制服国产| 久久韩剧网电视剧| 风间由美一区| 亚洲欧美日韩直播| 手机福利小视频在线播放| 欧美成人video| 99在线无码精品入口| 欧美视频日韩视频在线观看| 亚洲另类在线观看| 婷婷中文字幕一区三区| 国产亚洲精品久久久久久打不开| 亚洲欧洲国产专区| 精品手机在线视频| 国产拍欧美日韩视频二区| 无码人妻精品一区二区三区温州| 成人性生交大片免费看中文| 免费高清视频在线观看| 久草热8精品视频在线观看| 浓精h攵女乱爱av| 日韩电影免费在线看| 欧在线一二三四区| 日韩不卡一区二区三区| 日韩av手机版| 奇米四色…亚洲| 色片在线免费观看| 免费黄网站欧美| 亚洲视频一二三四| 久久99国产精品免费网站| 久久99爱视频| 国产一区二区免费在线| 91在线第一页| 国产精品91一区二区| 国产一区二区在线观看免费视频| 国产综合色精品一区二区三区| 色91精品久久久久久久久| 久久99在线观看| 波多野结衣免费观看| 国产精品18久久久久久久网站| 九九九久久久久久久| 国产v综合v亚洲欧| 欧美丰满少妇人妻精品| 国产亚洲短视频| 国产第一页精品| 自拍偷拍国产精品| 国产在线观看免费av| 精品欧美一区二区三区| 亚洲熟女综合色一区二区三区| 91豆麻精品91久久久久久| 中文字幕码精品视频网站| 欧美高清性hdvideosex| 亚洲黄色在线播放| 日韩精品中文字幕在线播放| 二区三区在线| 久久综合久久八八| 国产精品xx| 国产精品综合久久久| 天堂精品久久久久| 免费影院在线观看一区| 婷婷亚洲最大| 波多野结衣乳巨码无在线| 日本欧美韩国一区三区| 午夜影院免费版| 91丨porny丨首页| 日本 欧美 国产| 精品国产鲁一鲁一区二区张丽 | 天堂电影一区| 国产成人精品视频在线观看| 99精品国产九九国产精品| 99热最新在线| 国产a久久精品一区二区三区| 亚洲 欧洲 日韩| 亚洲一区黄色| 色综合五月婷婷| 久久免费电影网| 成人免费毛片xxx| 天天影视色香欲综合网老头| 亚洲熟妇无码久久精品| 精品国产乱码久久久久久老虎 | 国产91免费看| 一区二区国产精品视频| 男女在线观看视频| 国产精品视频网| 女同一区二区三区| 特级黄色录像片| 日本成人在线一区| 亚洲中文字幕无码一区| 亚洲欧洲综合另类| 亚洲无码精品一区二区三区| 亚洲精品一区在线观看| 国产原创在线观看| 国产精品高潮呻吟久久av野狼| 成人在线超碰| 影音先锋男人的网站| 日韩成人午夜精品| 黄色工厂在线观看| 亚洲综合激情另类小说区| 亚洲综合精品国产一区二区三区| 日韩精品极品视频免费观看| 成人午夜在线影视| 国产精品亚洲激情| 国产99久久久国产精品成人免费| 国产女主播自拍| 国产成a人无v码亚洲福利| 黄色录像二级片| 欧美三区在线视频| 国产h在线观看| 国产成人久久精品| 亚洲丁香日韩| 国产中文字幕在线免费观看| 成人一区二区三区在线观看| 中文字幕手机在线观看| 欧美精品777| 亚洲视频tv| 国产欧美日韩最新| 欧美wwwww| 日本 片 成人 在线| 中文字幕国产一区二区| 久久久久久久亚洲| 国产亚洲精品久久久久动| 在线毛片观看| 欧美理论一区二区| 美女久久一区| 韩国三级hd中文字幕| 91福利视频久久久久| 福利视频在线看| 国产在线精品一区免费香蕉 | 99精品免费在线观看| 久久综合丝袜日本网| 国产成人免费看| 亚洲欧美国产视频| 日韩三区在线| 亚洲一区免费看| 国产一区二区在线观看视频| 外国一级黄色片| 亚洲缚视频在线观看| 国产无遮挡裸体视频在线观看| 精品乱码一区| 欧美一级视频| 国产精品69久久久久孕妇欧美| 欧美日韩日日骚| 成年人网站在线| 国产区欧美区日韩区| 国产欧美大片| www.涩涩爱| 日韩久久久精品| 国产粉嫩在线观看| 日本午夜精品一区二区三区| 麻豆成人久久精品二区三区红| 99久久久免费精品| 欧美xfplay| 久久电影tv| 中文字幕一区二区三区乱码| 国产不卡高清在线观看视频| 国产精品免费av一区二区| 亚洲欧美日韩精品久久| 青青久久精品| www.日本少妇| 久久久99久久| 国产夫妻在线观看| 2025国产精品视频| 色777狠狠狠综合伊人| 久久久久99人妻一区二区三区| 黄色成人av网| 免费看美女视频在线网站| 国产精品青青草| 日本欧美久久久久免费播放网| 青娱乐国产精品| 国产亚洲欧美日韩精品| 中文字幕一区二区三区四区久久 | 成人激情校园春色| 波多野结衣小视频| 欧美日本亚洲视频| 欧美日韩性在线观看| 亚洲欧美日本一区二区| 欧美日韩一区二区三区| 国产传媒在线播放| 你懂的网址一区二区三区| 国产一区二区三区久久久| 特级毛片www| 欧美高跟鞋交xxxxhd| 成人在线免费视频观看| 亚洲 欧美 日韩在线| 91精品麻豆日日躁夜夜躁| av手机在线观看|