原代碼:
可以看到邏輯上它是根據line字符串是否包含了某關鍵詞,來做不同的處理,處理可能複雜或者簡單,並且是有優先順序關係的。 因此他使用了n個else-if來處理,每加1個關鍵詞,圈複雜度就加1。
此問題處理的關鍵在於,如何根據不同關鍵詞,去執行不同的操作,而且這個操作一般都很短。 那麼根據以下思路:
- 不同關鍵字 -> 枚舉類
- 執行不同操作 -> 枚舉對象各持有1各 操作接口實現
- 操作行一般都很短 -> labamda表達式
那麼我先定義1個set操作接口如下,提供給枚舉類中各對象作爲私有成員:
接着再定義枚舉類:
然後枚舉類中的枚舉用lambda實現:
原方法中的if-else則就可以改爲非常簡單的: