成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:項目中的if else太多了,該怎么重構?

開發 后端
if else過多的話,一般都是用策略模式來進行重構,策略模式也非常的簡單。先定義一個接口,各種處理分支實現這個接口,定義好 條件->處理類的映射關系,然后根據條件找到響應的處理類執行即可,當有新的分支的話,只需要增加一個接口實現類,增加一個條件->映射類的映射關系即可。
 

[[282877]]

 

前言

if else過多的話,一般都是用策略模式來進行重構,策略模式也非常的簡單。先定義一個接口,各種處理分支實現這個接口,定義好 條件->處理類的映射關系,然后根據條件找到響應的處理類執行即可,當有新的分支的話,只需要增加一個接口實現類,增加一個條件->映射類的映射關系即可。還是很好容易理解的

介紹

不出意外,這應該是年前最后一次分享,本次來一點實際開發中會用到的小技巧。

比如平時大家是否都會寫類似這樣的代碼:

面試官:項目中的if else太多了,該怎么重構?

 

條件少還好,一旦 else if 過多這里的邏輯將會比較混亂,并很容易出錯。

比如這樣:

面試官:項目中的if else太多了,該怎么重構?

 

摘自 cim 中的一個客戶端命令的判斷條件。

剛開始條件較少,也就沒管那么多直接寫的;現在功能多了導致每次新增一個 else 條件我都得仔細核對,生怕影響之前的邏輯。

這次終于忍無可忍就把他重構了,重構之后這里的結構如下:

面試官:項目中的if else太多了,該怎么重構?

 

最后直接變為兩行代碼,簡潔了許多。

而之前所有的實現邏輯都單獨抽取到其他實現類中。

面試官:項目中的if else太多了,該怎么重構?

 

面試官:項目中的if else太多了,該怎么重構?

 

這樣每當我需要新增一個 else 邏輯,只需要新增一個類實現同一個接口便可完成。每個處理邏輯都互相獨立互不干擾。

實現

面試官:項目中的if else太多了,該怎么重構?

 

按照目前的實現畫了一個草圖。

整體思路如下:

  • 定義一個 InnerCommand 接口,其中有一個 process 函數交給具體的業務實現。
  • 根據自己的業務,會有多個類實現 InnerCommand 接口;這些實現類都會注冊到 Spring Bean 容器中供之后使用。
  • 通過客戶端輸入命令,從 Spring Bean 容器中獲取一個 InnerCommand 實例。
  • 執行最終的 process 函數。

主要想實現的目的就是不在有多個判斷條件,只需要根據當前客戶端的狀態動態的獲取 InnerCommand 實例。

從源碼上來看最主要的就是 InnerCommandContext 類,他會根據當前客戶端命令動態獲取 InnerCommand 實例。

面試官:項目中的if else太多了,該怎么重構?

 

  • 第一步是獲取所有的 InnerCommand 實例列表。
  • 根據客戶端輸入的命令從第一步的實例列表中獲取類類型。
  • 根據類類型從 Spring 容器中獲取具體實例對象。

因此首先第一步需要維護各個命令所對應的類類型。

面試官:項目中的if else太多了,該怎么重構?

 

所以在之前的枚舉中就維護了命令和類類型的關系,只需要知道命令就能知道他的類類型。

這樣才能滿足只需要兩行代碼就能替換以前復雜的 if else,同時也能靈活擴展。

面試官:項目中的if else太多了,該怎么重構?

 

總結

當然還可以做的更靈活一些,比如都不需要顯式的維護命令和類類型的對應關系。

只需要在應用啟動時掃描所有實現了 InnerCommand 接口的類即可,在 cicada 中有類似實現,感興趣的可以自行查看。

這樣一些小技巧希望對你有所幫助。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2022-09-16 08:16:25

策略模式算法

2024-07-10 10:08:36

項目多表關聯哈希

2024-09-24 16:30:46

分布式鎖Redis數據中間件

2021-09-15 07:56:32

TypeScriptVue項目

2021-09-14 07:06:13

React項目TypeScript

2021-03-24 10:25:24

優化VUE性能

2024-09-25 17:44:08

2022-07-12 12:05:22

JavaSemaphore

2015-08-13 10:29:12

面試面試官

2025-06-04 07:48:46

2024-07-23 08:21:19

2022-05-23 08:43:02

BigIntJavaScript內置對象

2022-11-23 17:44:10

HadoopHDFS

2025-04-01 00:00:00

項目CRUD單例模式

2025-04-14 11:41:12

RocketMQ長輪詢配置

2023-02-08 07:04:20

死鎖面試官單元

2025-02-26 12:19:52

2025-03-10 11:48:22

項目服務設計

2023-01-26 00:25:09

JVM設置技術

2010-08-12 16:28:35

面試官
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91成人小视频 | 国产免费一区二区 | 日韩欧美一区二区三区四区 | 爱爱无遮挡| 一级片在线播放 | 极品在线| 国产清纯白嫩初高生视频在线观看 | 九九热精品视频 | 在线观看www高清视频 | 国产高清免费在线 | av一级毛片 | 欧美无乱码久久久免费午夜一区 | 九九热在线视频免费观看 | 亚洲毛片在线观看 | 国产视频福利 | 婷婷丁香在线视频 | 九九在线视频 | 久久精品中文字幕 | 97热在线| 99久久精品国产一区二区三区 | 国产精品国产a级 | www.久久 | 亚洲成人久久久 | 久久999 | 久久精品国产99国产精品亚洲 | 日韩一区二区三区视频 | 欧美精品久久 | 精品欧美一区二区三区久久久 | 99爱在线观看 | 老司机67194精品线观看 | 自拍偷拍第1页 | 日日夜夜天天干 | 中文字幕av色 | 国产免费一区二区 | av免费观看在线 | 日韩超碰| 中文字幕黄色大片 | 国产精品久久久久一区二区三区 | 午夜视频一区二区三区 | 高清久久 | 狠狠的操 |