設計模式 常用的設計原則

2021-07-27 15:27:53 字數 1430 閱讀 4211

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

說明:單一職責是一種必需的思想,即職責相互分離。

如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當發生變化時,設計會遭受到意想不到的破壞。

軟體設計真正要做的許多內容,就是法線職責並把那些職責相互分離,其實要去判斷是否應該分離出類來,那就是如果你能夠想到多於乙個的動機去改變乙個類,那麼這個類就具有多餘乙個的職責,例如mvc框架中檢視v、控制器c、模組m相互分離,不同模組控制各自的功能,這樣可以降低程式的耦合度。

2、開放-封閉原則:是說軟體實體(類、模組、函式等等)應該可以擴充套件,但是不可以修改。

說明:這個原則其實是有兩個特徵,乙個是說「對於擴充套件是開放的」,另乙個是說「對於更改是封閉的」。

然後絕對的對修改關閉是不可能的,無論模組是多麼的「封閉」,都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。他必須先猜測出最有可能發生的變化種類,然後構造抽象來隔離那些變化。因此面對新需求,對程式的改動是通過增加新**進行的,而不是更改現有的**。

開放-封閉原則是物件導向設計的核心所在,遵循這個原則可以帶來物件導向技術所聲成的巨大好處,也就是可維護、可擴充套件、可復用、靈活性好。開發人員應該僅對程式中呈現出頻繁變化的那些部分做出抽象,然後,對於應用程式中的每個部分都刻意地進行抽象同樣不是乙個好主意,拒絕不成熟的抽象和抽象本身一樣重要。

3、依賴倒置原則:a.高層模組不應該依賴低層模組,兩個都應該依賴抽象;b.抽象不應該依賴細節,細節應該依賴抽象。

說明:一句話「針對介面程式設計,不要對實現程式設計。」

依賴倒置其實可以說是物件導向設計的標誌,用哪種語言來編寫程式不重要,如果編寫時考慮的都是如何針對抽象程式設計而不是針對細節程式設計,即程式中所有的依賴關係都是終止於抽象類或介面,那就是物件導向的設計,反之那就是過程化的設計了。

這個原則一般與另乙個設計原則共同使用,那就是下面的「黎克特制替換原則」。

4、黎克特制替換原則:子型別必須能夠替換掉他們的父型別。

說明:乙個軟體實體如果使用的是乙個父類的話,那麼一定適用於其子類(廢話,因為子類繼承父類,子類肯定能使用父類的所有非私有屬性、方法等),而且它察覺不出父類物件和子類物件的區別。也就是說,把父類都替換成它的 子類,程式行為沒有變化。

只有當子類替換掉父類,軟體單位的功能不受到影響時,父類才能真正被復用,而子類也能夠在父類的基礎上增加新的行為。

5、迪公尺特原則

(也叫最少知識原則)

:如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用,如果其中乙個類需要呼叫另外乙個類的方法時,可以通過第三者**這個呼叫。

說明:迪公尺特根本思想是強調了類之間的松耦合。

類的結構上設計,每個類都應當盡量降低成員的訪問許可權。

類之間的耦合越弱,越有利於復用,乙個處在弱耦合的類被修改,不會對有關係的類造成波及。

設計模式 7個常用的設計原則

單一職責 用於橫向區分,介面,類,方法職責單一。介面1與介面2分別包含各自的職責 介面隔離 用於豎向繼承,介面粒度不能過大。它的實現類 客戶端 不需要多餘方法 開閉原則 目的。擴充套件開放,修改關閉 黎克特制代換 基礎。基類出現的地方,必須可以使用子類替換 依賴倒轉 手段。依賴抽象,依賴介面。實現需...

設計模式 設計模式原則

1 單一職責原則 srp 乙個類應當只有乙個引起其變化的原因。使用單一職責原則的好處有 1 類的複雜性降低 2 可讀性提高 3 可維護性提高 4 變更引起的風險降低 2 黎克特制替換原則 lsp 在使用父類的地方,可以使用其子類替換。黎克特制替換原則的含義 1 子類必須完全實現父類的方法 2 子類可...

設計模式的設計原則

單一職責原則 srp 單一職責適用於 介面,類,方法 開放封閉原則 ocp 乙個軟體實體應當對外擴充套件開放,對修改關閉 關鍵 什麼叫做鉤子方法?是對於抽象方法或者介面中定義的方法的乙個空實現 在實際的運用中,例如有乙個介面,這個介面裡面有7個方法,而你只想用其中的乙個方法,那麼這時,你可以寫乙個抽...