設計模式六大原則

2021-10-02 07:26:40 字數 2207 閱讀 2914

開閉原則是說軟體實體對擴充套件開放,而對修改關閉,即軟體實體應盡量在不修改原始碼的基礎上進行擴充套件。

實現開閉原則的關鍵就是抽象化,並且從抽象化中匯出具體化的實現。

總的來說,開閉原則提高了系統的可維護性和**的重用性。

無論模組是多麼的封閉,都會存在一些無法對之封閉的變化。既然不能完全封閉,設計人員必須對於他設計的模組應該對哪些變化封閉做出選擇。必須先猜測最有可能發生變化的類,然後構造抽象來隔離那些變化。

拒絕不成熟的抽象和抽象本身一樣重要。

以面向抽象的方式來達到擴充套件開放。

就乙個類而言,應該僅有乙個引起它變化的原因,在軟體系統中,如果乙個類承擔的責任越多,那麼它被復用的可能性就越小。

單一職責原則是實現高內聚、低耦合的指導方針。

如果乙個有多餘乙個的動機去改變它,那麼這個類就具有多個職責。

軟體設計真正要做的內容就是發現職責,並且把這些職責相互隔離。

所有引用基類的地方必須能夠透明地使用其子類物件。

將乙個基類替換成他的子類物件,程式將不會產生任何錯誤和異常,反過來就不成立,使用乙個子類物件,那麼它不一定能夠使用基類物件。

黎克特制替換原則是實現開閉原則的重要方式之一,使用基類的地方都可以使用子類物件,則在程式設計當中,盡量使用基類型別來對物件進行定義,而執行時在確定其子類型別,使用子類物件替換父類物件。

子類的所有方法必須在父類中宣告,或子類必須實現父類中宣告的所有方法。

盡量把父類設計成抽象類或者介面,讓子類繼承父類或者實現父介面。

高層模組不應該依賴底層模組,兩者都應該依賴其抽象。

抽象不應該依賴細節。

細節應該依賴於抽象。

更為精簡的定義就是面向介面程式設計。

dip的好處:採用依賴倒轉原則可以減少類間的耦合性,提高系統的穩定性,減低並行開發引起的風險,提高**的可讀性和可維護性。

每個類盡量都有介面或者抽象類,或者介面和抽象類都有,變數的表面型別盡量是介面或者抽象類。

任何類都不應該從具體類派生。

盡量不要重寫基類已經寫好的方法(黎克特制替換原則)。

依賴倒轉原則的三種寫法:介面宣告依賴物件、建構函式傳遞依賴物件、setter方法傳遞依賴物件

客戶端不應該依賴它不需要的介面,類間的依賴應該建立在最小的介面上。

介面隔離原則是對介面使用進行約束規範的乙個原則,想把介面用好,關鍵在於隔離

解決介面臃腫的方法是介面拆分,拆分介面是要注意必須滿足單一職責原則提高高內聚定**務

介面隔離原則的好處就是避免了介面的汙染提高了靈活性提供了高內聚提供了定**務

又叫最少只是原則,乙個物件應該對其他物件有盡可能少的了解,即乙個類應該對自己需要耦合和呼叫的類知道的最少。

迪公尺特法則意義在於減少類之間的耦合。

只和直接朋友交流,即出現在成員變數、方法的輸入輸出引數中的類就是直接朋友,方法體內的朋友不是直接朋友,如果乙個類和不是直接朋友的類進行交流,就違背了迪公尺特法則。

儘量減少乙個類對外暴露的方法。

只有弱耦合後,類的復用才能夠提高,類變更的風險才可以降低。

又叫組合/聚合復用原則,軟體復用時,要盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。

如果使用繼承關係,則必須嚴格遵循黎克特制替換原則,合成復用原則和黎克特制替換原則相輔相成,兩者都是開閉原則的具體實現規範。

繼承復用雖然簡單和易實現,但是繼承復用破壞了類的封裝性子類與父類的耦合度高它限制了類的靈活性

組合或聚合復用可以已有物件加入到新物件,使之成為新物件的一部分,物件可以呼叫又有物件的功能。

組合或聚合復用的優點:維持了類的封裝性新舊類之間的耦合復用的靈活性高

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...

設計模式六大原則

參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...