成人免费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

2025-06-04 07:48:46

2015-08-13 10:29:12

面試面試官

2024-07-23 08:21:19

2025-04-01 00:00:00

項目CRUD單例模式

2022-05-23 08:43:02

BigIntJavaScript內置對象

2022-11-23 17:44:10

HadoopHDFS

2025-02-26 12:19:52

2025-03-10 11:48:22

項目服務設計

2023-02-08 07:04:20

死鎖面試官單元

2025-04-14 11:41:12

RocketMQ長輪詢配置

2023-01-26 00:25:09

JVM設置技術

2010-08-12 16:28:35

面試官
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品欧美乱码久久久久久 | 91影院 | av 一区二区三区 | 亚洲一区 | 国产精品色一区二区三区 | 国产日韩中文字幕 | 久久免费精彩视频 | 国产日韩欧美精品 | 欧美性大战xxxxx久久久 | 99视频在线播放 | 成人激情视频免费观看 | 午夜精品久久久久久久久久久久久 | 91免费观看视频 | 久草日韩 | 色网站在线免费观看 | 国产精品毛片一区二区在线看 | 精品国产乱码久久久久久图片 | 国产一区二区三区四区区 | 欧美另类视频在线 | 国产伦一区二区三区四区 | 成人国产精品久久久 | www国产亚洲精品久久网站 | 亚洲网站在线观看 | 99视频免费 | 99久久久久国产精品免费 | 国产精品1区2区3区 国产在线观看一区 | 精品一区在线 | 久久精品一区二区三区四区 | 亚洲人精品午夜 | 亚洲久久久 | 美国一级片在线观看 | 日本免费在线 | 日韩精品一区二区三区视频播放 | 国产目拍亚洲精品99久久精品 | 激情久久av一区av二区av三区 | 亚洲一二三在线 | 久久久青草婷婷精品综合日韩 | 久久久.com| 日韩欧美视频在线 | 免费精品在线视频 | 亚洲欧美一区二区三区国产精品 |