1.單一職責原則
解釋:對於乙個類而言,應該有且僅有乙個引起它變化的原因。
為什麼要用單一職責:如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其它職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受到意想不到的破壞。軟體設計真正要做的許多內容,就是發現職責並把那些職責相互分離。
2.開放封閉原則
解釋:對於擴充套件是開放的,對於更改是關閉的。
為什麼要用開放封閉原則:它物件導向設計的核心所在。遵循這個原則可以帶來物件導向技術所聲稱的巨大好處,也就是可維護,可擴充套件,可復用,靈活性好。開發人員應該僅對程式中呈現出頻繁變化的那些部分做出抽象,然而,對於應用程式中的每個部分都刻意地進行抽象同樣不是乙個好主意。拒絕不成熟的抽象和抽象本身一樣重要。
3.依賴倒轉原則
①高層模組不應該依賴低層模組,兩個都應該依賴抽象
②抽象不應該依賴細節,細節應該依賴抽象。(我們要針對介面程式設計,而不要針對實現程式設計。)
不使用依賴倒轉原則:
缺點:高層模組太依賴低層模組,耦合太緊密。低層模組發生變化會影響到高層模組。
解決方法:利用依賴倒置原則使高層模組和低層模組都依賴於抽象(介面或抽象類)。
修改後的uml圖如下:
優點:這樣的話修改低層模組不會影響到高層模組,減小了它們之間的耦合度,增強系統的穩定性。
總結:依賴倒置原則其實可以說是物件導向設計的標誌,用哪種語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止於抽象類或者介面,那就是物件導向的設計,反之那就是過程化的設計了。
4.黎克特制轉換原則
解釋:子型別必須能夠替換掉它們的父型別。
總結:也正是因為有了黎克特制替換原則,使得繼承復用成為了可能。只有當子類可以替換掉父類,軟體單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。
5.介面隔離原則
解釋:盡量把介面按功能切分,盡量避免乙個介面定義大量方法。
為什麼要介面隔離呢?
因為如果有些實現類只需要實現部分方法,那麼就需要將不需要實現的方法也實現了,這不是合理的設計
6.迪公尺特原則
解釋:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。
在類的結構設計上,每乙個類都應當盡量降低成員的訪問許可權,也就是說,乙個類包裝好自己的private狀態,不需要讓別的類知道的字段或行為(方法)就盡量不要公開。它的根本思想是強調了類之間的松耦合。
怎麼理解這幾個原則呢?
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...