一 設計模式六大原則

2021-08-17 17:33:18 字數 2518 閱讀 8809

1、開閉原則

對擴充套件開發,對修改關閉。

實現開閉原則的關鍵就在於「抽象

」。把系統的所有可能的行為抽象成乙個抽象底層,這個抽象底層規定出所有的具體實現必須提供的方法的特徵。作為系統設計的抽象層,要預見所有可能的擴充套件,從而使得在任何擴充套件情況下,系統的抽象底層不需修改;同時,由於可以從抽象底層匯出乙個或多個新的具體實現,可以改變系統的行為,因此系統設計對擴充套件是開放的。

梅耶原則:

乙個類的實現只應該因錯誤而修改,新的或者改變的特性應該通過新建不同的類實現。新建的類可以通過繼承的方式來重用原類的**。衍生的子類可以或不可以擁有和原類相同的介面。

多型原則:實現可以被改變,多種實現可以被建立,並且多型化的替換不同的實現。

可復用性好:我們可以在軟體完成以後,仍然可以對軟體進行擴充套件,加入新的功能,非常靈活。因此,這個軟體系統就可以通過不斷地增加新的元件,來滿足不斷變化的需求。

可維護性好:由於對於已有的軟體系統的元件,特別是它的抽象底層不去修改,因此,我們不用擔心軟體系統中原有元件的穩定性,這就使變化中的軟體系統有一定的穩定性和延續性。

總結:提取抽象類盡可能考慮到所有的擴充套件,以後所有的功能擴充套件通過繼承該抽象類的子類來完成新的功能,該抽象類無需變動。通過實現虛基類和介面實現功能的擴充套件。通過繼承父類繼承原有的功能,在子類中通過重寫方法覆蓋原有的功能,實現功能的擴充套件

2、黎克特制代換原則

黎克特制代換原則(liskov substitution principle lsp)物件導向設計的基本原則之一。 黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。

lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。黎克特制代換原則是對「開

-閉」原則的補充。實現「開

-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。

lsp

講的是基類

和子類的關係。只有當這種關係存在時,黎克特制代換關係才存在。

在進行設計的時候,盡量從

抽象類繼承,而不是從具體類繼承。如果從繼承等級樹來看,所有

葉子節點

應當是具體類,而所有的樹枝節點應當是抽象類或者介面。當然這個只是乙個一般性的指導原則,使用的時候還要具體情況具體分析。

簡單的理解為乙個軟體實體如果使用的是乙個父類,那麼一定適用於其子類,而且它察覺不出父類物件和子類物件的區別。也就是說,軟體裡面,把父類都替換成它的子類,程式的行為沒有變化。

3、依賴倒轉原則

a.高層次的模組不應該依賴於低層次的模組,他們都應該依賴於抽象。

b.抽象不應該依賴於具體實現,具體實現應該依賴於抽象。

依賴倒置原則(dependence inversion principle)是程式要依賴於抽象介面,不要依賴於具體實現。簡單的說就是要求對抽象進行程式設計,不要對實現進行程式設計,這樣就降低了客戶與實現模組間的耦合。

4、介面隔離原則

使用多個專門的介面比使用單一的總介面要好。

乙個類對另外乙個類的依賴性應當是建立在最小的介面上的。

乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面的汙染。

「不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的

類層次結構

。」這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫使用者使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

5、迪公尺特法則

乙個軟體實體應當盡可能少的與其他實體發生相互作用。每乙個軟體單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位。

迪公尺特法則不希望類之間建立直接的聯絡。如果真的有需要建立聯絡,也希望能通過它的

友元類來轉達。因此,應用迪公尺特法則有可能造成的乙個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互呼叫關係——這在一定程度上增加了系統的複雜度

6、合成復用原則

合成復用原則就是在乙個新的物件裡通過關聯關係(包括組合關係和聚合關係)來使用一些已有的物件,使之成為新物件的一部分;新物件通過委派呼叫已有物件的方法達到復用功能的目的。簡言之:復用時要盡量使用組合/聚合關係(關聯關係),少用繼承。

在物件導向設計中,可以通過兩種方法在不同的環境中復用已有的設計和實現,即通過組合

/聚合關係或通過繼承,但首先應該考慮使用組合

/聚合,組合

/聚合可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少;其次才考慮繼承,在使用繼承時,需要嚴格遵循黎克特制代換原則,有效使用繼承會有助於對問題的理解,降低複雜度,而濫用繼承反而會增加系統構建和維護的難度以及系統的複雜度,因此需要慎重使用繼承復用。

設計模式六大原則

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

設計模式六大原則

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

設計模式六大原則

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