天天看點

【面向對象設計原則】之 單一職責原則(SRP)

  剛重構完,深感clean code 之美,令吾陶醉,總結下吧。O(∩_∩)O

面向對象設計原則,有時這些原則之間互相依存(如OCP 與 DIP),有時又有點沖突(如OCP 與 ISP)

雖隻淺淺學習了SRP OCP LSP DIP ISP ,但還是被這思想深深震撼。

就一個類而言,應該僅有一個引起它變化的原因

為什麼要SRP?

  情景:如果有多個動機耦合在一起,則一個動機可能會削弱或者抑制這個類完成其他職責的能力。

    - 情景一:表面上可以耦合在一起,但當某一個功能不斷複雜化。

    - 情景二:兩功能互不相關。

實際場景 :

系統由許多不同的元件組成,每一個元件個負責一塊

諸如日志、事務管理和安全這樣的系統服務經常融入到自身具有核心業務邏輯的元件中去。

舉個栗子:《騎士和詩人》(騎士要出發時候,詩人要吟詩;騎士回來時候,詩人也要吟詩) ——————————————————————————————來自《Spring實戰》

【面向對象設計原則】之 單一職責原則(SRP)

詩人應該做他分内的事,根本不需要騎士指令他來這麼做。

【面向對象設計原則】之 單一職責原則(SRP)

什麼是SRP?

單一職責原則:就一個類而言,應該僅有一個引起它變化的原因

  職責是什麼?

  • 職責:是引起變化的原因
  • 如果有多于一個動機去改變一個類,這個類就具有多于一個職責

用SRP有什麼好處?

  1. clean code
  2. 節約時間(連結時間,編譯時間),節約空間(記憶體)。

學習SRP思想!

  1. 嗅出bad smell(例如一處函數修改,而另個函數則也要随之修改)
  2. 如果應用程式的變化方式總是導緻這兩個職責同時變化,則這兩個職責應該在一起。
  3. 當一個需求來時,應該發現變化,封裝變化。

繼續閱讀