日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

业务代码中,太多 if else 怎么办?

發(fā)布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 业务代码中,太多 if else 怎么办? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前段時間,我將公司系統(tǒng)中的批量審單的功能進行了重構,用到了java的并發(fā)編程進行異步化處理,數(shù)據(jù)庫的樂觀鎖機制處理多線程并發(fā)更新數(shù)據(jù)。其中批量審單的業(yè)務處理涉及到多種任務類型,對應不同的業(yè)務方法進行處理,比如轉(zhuǎn)倉,轉(zhuǎn)快遞,添加贈品,刪除贈品,拆分訂單,批量駁回,批量作廢等等,其中就用到了策略模式。

if else模式

????????if?("BATCH_CHANGE_WAREHOUSE".equals(taskType))?{//批量轉(zhuǎn)倉邏輯}?else?if?("BATCH_CHANGE_SHIPPING".equals(taskType))?{//批量轉(zhuǎn)快遞邏輯}?else?if?("BATCH_REPLACE_ORDER_GOODS".equals(taskType))?{//批量替換訂單商品邏輯}?else?if?("BATCH_DELETE_ORDER_GOODS".equals(taskType))?{//批量刪除訂單商品邏輯}?else?if?("BATCH_ADD_MEMO".equals(taskType))?{//批量添加備注邏輯}?else?{//任務類型未知System.out.println("任務類型無法處理");}

看起來,思路清晰,if,else分支也很清楚,但不覺得代碼很臃腫,維護起來麻煩嗎,尤其是其他人來接鍋的時候,連看下去的欲望都沒有了。這時候你需要用策略模式消除其中的if else,進行一下簡單的重構!

策略模式

1、首先抽象業(yè)務處理器

public?abstract?class?InspectionSolver?{public?abstract?void?solve(Long?orderId,?Long?userId);public?abstract?String[]?supports(); }

2、將業(yè)務處理器和其支持處理的類型放到一個容器中,java里Map就是最常用的容器之一

@Component public?class?InspectionSolverChooser?implements?ApplicationContextAware{private?Map<String,?InspectionSolver>?chooseMap?=?new?HashMap<>();public?InspectionSolver?choose(String?type)?{return?chooseMap.get(type);}@PostConstructpublic?void?register()?{Map<String,?InspectionSolver>?solverMap?=?context.getBeansOfType(InspectionSolver.class);for?(InspectionSolver?solver?:?solverMap.values())?{for?(String?support?:?solver.supports())?{chooseMap.put(support,solver);}}}private?ApplicationContext?context;@Overridepublic?void?setApplicationContext(ApplicationContext?applicationContext)?throws?BeansException?{this.context=applicationContext;} }

這里是在應用啟動的時候,加載spring容器中所有InspectionSolver類型的處理器,放到InspectionSolverChooser的map容器中。注意是InspectionSolver類型,所以定義的處理器都得繼承InspectionSolver,其次是spring容器中的才能加載,所以定義的處理器都得放到spring容器中(@Component注解不能少)

3、定義不同的處理器

@Component public?class?ChangeWarehouseSolver?extends?InspectionSolver?{@Overridepublic?void?solve(Long?orderId,?Long?userId)?{System.out.println("訂單"+orderId+"開始進行批量轉(zhuǎn)倉了。。");}@Overridepublic?String[]?supports()?{return?new?String[]?{InspectionConstant.INSPECTION_TASK_TYPE_BATCH_CHANGE_WAREHOUSE};} }@Component public?class?ChangeShippingSolver?extends?InspectionSolver{@Overridepublic?void?solve(Long?orderId,?Long?userId)?{System.out.println("訂單"+orderId+"開始進行轉(zhuǎn)快遞了。。");}@Overridepublic?String[]?supports()?{return?new?String[]?{InspectionConstant.INSPECTION_TASK_TYPE_BATCH_CHANGE_SHIPPING};} }@Component public?class?ReplaceOrderGoodsSolver?extends?InspectionSolver{@Overridepublic?void?solve(Long?orderId,?Long?userId)?{System.out.println("訂單"+orderId+"開始進行替換商品了");}@Overridepublic?String[]?supports()?{return?new?String[]{InspectionConstant.INSPECTION_TASK_TYPE_BATCH_REPLACE_ORDER_GOODS};} }

4、測試類

@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes=Application.class)//?指定spring-boot的啟動類 public?class?InspectionTest?{@Autowiredprivate?InspectionSolverChooser?chooser;@Testpublic?void?test()?throws?Exception{//準備數(shù)據(jù)String?taskType?=?InspectionConstant.INSPECTION_TASK_TYPE_BATCH_CHANGE_WAREHOUSE;Long?orderId?=?12345L;Long?userId?=?123L;//獲取任務類型對應的solverInspectionSolver?solver?=?chooser.choose(taskType);if?(solver?==?null)?{throw?new?RuntimeException("任務類型暫時無法處理!");}//調(diào)用不同solver的方法進行處理solver.solve(orderId,userId);} }

在測試類中我消除了可能一長段的if else,從選擇器InspectionSolverChooser中根據(jù)type的不同取出不同的任務處理器InspectionSolver,然后調(diào)用其solve()方法進行任務處理,不同處理器調(diào)用的當然就是不同的solve()方法了,目的達到。

總結

以上是生活随笔為你收集整理的业务代码中,太多 if else 怎么办?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一级爽片 | 中国黄色a级 | 日本三级日本三级日本三级极 | 97人妻精品一区二区三区 | 电影寂寞少女免费观看 | 亚洲男人第一网站 | 久草网址| 香蕉视频链接 | 欧美成免费| 久久久久久蜜桃一区二区 | 自拍亚洲一区 | 欧美色噜噜 | 天天干夜夜操 | 无码少妇一区二区三区 | 精品国产九九 | 亚洲一区二区三区欧美 | 99精品视频免费版的特色功能 | 91麻豆成人精品国产 | 影音先锋中文字幕一区 | 亚洲激情三区 | 国产福利视频在线观看 | 国产伦精品一区三区精东 | 日韩经典一区二区 | 亚洲AV无码成人精品区先锋 | 日韩aa| 欧美黄网站在线观看 | 麻豆网站免费看 | 777中文字幕| 99久久久久久久久久 | 精品免费一区二区 | 少妇一级淫片免费放 | 国产精品亚洲一区二区 | 一级精品视频 | 欧美黑人巨大xxx极品 | wwwxxx在线播放 | 日本成人毛片 | 七仙女欲春2一级裸体片 | 99青青草| 欧洲一区二区 | 日本少妇ⅹxxxxx视频 | 日韩欧美一区二区区 | 波多野结衣在线一区 | 国产又粗又猛又爽又黄的 | 天天操夜夜操视频 | 精品一区二区久久久久久按摩 | 国产精品国产三级国产三级人妇 | 亚洲欧美国产高清va在线播放 | 午夜激情在线观看视频 | 温柔女教师在线观看 | 国产网红主播精品av | 久久久精品999 | 亚洲性生活视频 | 久久久夜精品 | 91免费短视频 | 午夜精品偷拍 | 欧美极品少妇xxxxⅹ猛交 | 亚洲国产一区二区三区在线观看 | 中国毛片网站 | 99免费在线观看 | 私人av| 亚洲欧美变态另类丝袜第一区 | sm在线看| 2017日日夜夜 | 美日韩成人 | 欧美韩国日本 | 久久综合免费 | 精产国品一二三产品蜜桃 | 毛片看| 999国内精品永久免费视频 | 黄网站免费大全入口 | 亚洲情欲网 | 99精品无码一区二区 | 久操国产在线 | 国产69久久精品成人看 | 日本黄色成人 | 国产三级国产精品国产国在线观看 | 欧美特黄 | 国产精品一区二区无码免费看片 | 国产乱人视频 | 黄色av免费在线观看 | 国产有码视频 | 97人妻精品一区二区三区 | 中文字幕av有码 | 99视频导航 | 亚洲天堂一级片 | 牛牛精品一区 | 色无极亚洲色图 | 亚洲淫片 | av色欲无码人妻中文字幕 | 91久久久精品| 国产91欧美| 无码人妻精品中文字幕 | 国产视频网站在线观看 | 日本最新中文字幕 | 丰满人妻一区二区三区无码av | 日韩一区二区免费看 | 8ppav| 国产在线视频网 | 波多野结衣av电影 |