如果你復用代碼的方式還是復制粘貼率碾,如果你維護的模塊正在變得臃腫和復雜,如果你的一次小改動會無意中引發(fā)無關模塊的bug撑刺,那么你需要好好學習下設計模式了鹉胖。
最近在學習中小有收獲,忍不住在這里賣弄一番够傍,同時也希望有前輩來指點一二甫菠。
談到設計模式,首先想到的肯定是S.O.L.I.D五個設計原則冕屯。
單一職責原則
我們可以把職責定義為“變化的原因”寂诱,單一職責就是一個類只有一個引起它變化的原因。
怎么判斷一組變化是一個原因愕撰?
我試著下一個定義好了:若對每個變化A的可能a刹衫,都有且只有一個變化B的可能b與之對應,當變化a發(fā)生時b總會發(fā)生搞挣,當變化b發(fā)生時a總會發(fā)生带迟。那么變化A和變化B是同一個變化原因。
舉個例子:
模塊1
模塊2
模塊3
模塊1囱桨,模塊2仓犬,模塊3的功能相似。
其中的變化有:
- 頂部三角相對模塊的位置
- 模塊相對熱區(qū)(“書架”按鈕舍肠,“ 歷史”按鈕)的位置搀继。
- 列表項的內容(1,2為收藏,3為歷史)
- 底部按鈕的文案(“全部收藏”翠语,“全部歷史”)
這里有幾個變化原因呢叽躯?
- 三角的位置和模塊相對熱區(qū)的位置是一個變化原因点骑。當模塊與熱區(qū)左對齊時三角總是居左黑滴,當模塊與熱區(qū)居中對齊時三角總是居中袁辈,當模塊與熱區(qū)右對齊時三角總是居右晚缩。
- 底部文案和列表項內容當內容為收藏相關數(shù)據(jù)時橡羞,文案總為“全部收藏”卿泽;當內容為歷史相關數(shù)據(jù)時签夭,文案總為“全部歷史”第租。
-
沒有發(fā)生變化的部分
根據(jù)單一職責原則慎宾,沒有發(fā)生變化的部分可以和任意一個變化原因放在一起趟据。但是考慮到?jīng)]有發(fā)生變化的部分在未來可能衍生出新的變化原因汹碱,所以建議將沒有發(fā)生變化的部分也放在一個單獨的模塊中咳促。
這樣跪腹,我們就把一個復雜的功能劃分成了3個簡單的模塊冲茸,為大腦減負(不用禿頂了~)噪裕。同時膳音,將功能劃分也是“開閉原則”的前置條件祭陷。
未完待續(xù)兵志,設計模式初探(2)開閉原則