23種設計模式

2021-08-22 18:16:44 字數 3460 閱讀 9563

1. factory method(工廠方法)

簡單工廠與工廠方法

2. abstract factory(抽象工廠)

3. builder(建造者)

4. prototype(原型)

5. singleton(單例)

6. adapter class/object(介面卡)

7. bridge(橋接)

8. composite(組合)

9. decorator(裝飾)

10. facade(外觀)

11. flyweight(享元)

13. interpreter(直譯器)

14. template method(模板方法)

15. chain of responsibility(責任鏈)

16. command(命令)

17. iterator(迭代器)

18. mediator(中介者)

19. memento(備忘錄)

20. observer(觀察者)

21. state(狀態)

22. strategy(策略)

23. visitor(訪問者)

1、開閉原則(open close principle)

開閉原則就是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的**,實現乙個熱插拔的效果。所以一句話概括就是:為了使程式的擴充套件性好,易於維護和公升級。想要達到這樣的效果,我們需要使用介面和抽象類。實現開閉原則的核心思想就是面向抽象程式設計。

2、黎克特制代換原則(liskov substitution principle)

黎克特制代換原則(liskov substitution principle lsp)物件導向設計的基本原則之一。 黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。 lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。黎克特制代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。

總之:子類可以擴充套件父類的功能,但不能改變父類原有的功能。

1、子類可以實現父類的抽象方法,但不能覆蓋父類的非抽象方法。

2、子類中可以增加自己特有的方法。

3、當子類的方法過載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入引數更寬鬆。

4、當子類的方法實現父類的方法時(重寫/過載或實現抽象方法),方法的後置條件(即方法的輸出/返回值)要比父類更嚴格或相等。

3、依賴倒轉原則(dependence inversion principle)

依賴倒置原則(dependenceinversionprinciple,dip)是指設計**結構時,高層模組不應該依賴底層模組,二者都應該依賴其抽象。抽象不應該依賴細節;細節應該依賴抽象。通過依賴倒置,可以減少類與類之間的耦合性,提高系統的穩定性,提高**的可讀性和可維護性,並能夠降低修改程式所造成的風險。

4、介面隔離原則(inte***ce segregation principle)

介面隔離原則(inte***cesegregationprinciple,isp)是指用多個專門的介面,而不使用單一的總介面,客戶端不應該依賴它不需要的介面。這個原則指導我們在設計介面時應當注意一下幾點:

1、乙個類對一類的依賴應該建立在最小的介面之上。

2、建立單一介面,不要建立龐大臃腫的介面。

3、盡量細化介面,介面中的方法盡量少(不是越少越好,一定要適度)。

介面隔離原則符合我們常說的高內聚低耦合的設計思想,從而使得類具有很好的可讀性、可擴充套件性和可維護性。我們在設計介面的時候,要多花時間去思考,要考慮業務模型,包括以後有可能發生變更的地方還要做一些預判。對於抽象,對業務模型的理解是非常重要的。

5、迪公尺特法則(最少知道原則)(demeter principle)

迪公尺特原則(lawofdemeterlod)是指乙個物件應該對其他物件保持最少的了解,又叫最少知道原則(leastknowledgeprinciple,lkp),盡量降低類與類之間的耦合。迪公尺特原則主要強調只和朋友交流,不和陌生人說話。出現在成員變數、方法的輸入、輸出引數中的類都可以稱之為成員朋友類,而出現在方法體內部的類不屬於朋友類。

6、合成復用原則(composite reuse principle)

合成復用原則合成復用原則(composite/aggregatereuseprinciple,carp)是指盡量使用物件組合(has-a)/聚合(contanis-a),而不是繼承關係達到軟體復用的目的。可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少。繼承我們叫做白箱復用,相當於把所有的實現細節暴露給子類。組合/聚合也稱之為黑箱復用,對類以外的物件是無法獲取到實現細節的。要根據具體的業務場景來做**設計,其實也都需要遵循oop模型。

7、單一職責原則

單一職責(******responsibilitypinciple,srp)是指不要存在多於乙個導致類變更的原因。假設我們有乙個class負責兩個職責,一旦發生需求變更,修改其中乙個職責的邏輯**,有可能會導致另乙個職責的功能發生故障。這樣一來,這個class存在兩個導致類變更的原因。如何解決這個問題呢?我們就要給兩個職責分別用兩個class來實現,進行解耦。後期需求變更維護互不影響。這樣的設計,可以降低類的複雜度,提高類的可讀性,提高系統的可維護性,降低變更引起的風險。總體來說就是乙個class/inte***ce/method只負責一項職責。

設計模式 23種設計模式

一 軟體設計模式的概念 軟體設計模式 software design pattern 又稱設計模式,是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。它描述了在軟體設計過程中的一些不斷重 生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的 設計經驗的總結...

23種設計模式

建立型 1.單件模式 singleton pattern 2.抽象工廠 abstract factory 3.建造者模式 builder 4.工廠方法模式 factory method 5.原型模式 prototype 結構型 6.介面卡模式 adapter pattern 7.橋接模式 bridg...

23種設計模式

設計模式 一書歸納出23種設計模式 1 建立型模式 前面講過,社會化的分工越來越細,自然在軟體設計方面也是如此,因此物件的建立和物件的使用分開也就成為了必然趨勢。因為物件的建立會消耗掉系統的很多資源,所以單獨對物件的建立進行研究,從而能夠高效地建立物件就是建立型模式要 的問題。這裡有6個具體的建立型...