第229章 (1 / 3)

大B:“我來講講我個人對設計模式的理解吧。”

小A:“嗬嗬!好啊!”

大B:“也許能讓你更好地理解23種設計模式。”

1、Adapter(適配器)模式:旨在提供用戶期望的接口,以便利用具有不同接口的類的服務。

(1)個人理解:實際上隻是把客戶調用,轉變為調用已經存在的方法。適配器的作用可以理解為提供一個人人皆知的,顧名思義的新方法名。

(2)提示代碼:

2、Facade(外觀)模式:旨在為子係統提供一個接口,使之更加容易使用。

(2)個人理解:構建一個個目的明確的類,比如典型的靜態方法的使用。

(3)提示代碼:

(4)提示關鍵字:外觀類,工具類,實例類

3、Composite(組合)模式:旨在讓用戶能夠用統一的接口處理單個對象以及對象組合。

(1)經典範例:組合,樹,環

(2)個人理解:其他很多模式的基礎,群組可以包含群組或者個體,群組和個體有共同的接口。

(3)提示代碼:

(4)提示關鍵字:遞歸

4、責任型模式Bridge(橋接)模式:旨在將依賴抽象操作的類與這些抽象操作的實現相分離,從而使得抽象類與實現能夠獨立變化。

(1)經典範例:驅動程序

(2)個人理解:將抽象和方法的具體實現分離,抽象類中包含一個driver對象,driver對象即是對方法的具體實現。

(3)提示關鍵字:裝載

5、ChainofResponsibility(責任鏈)模式:旨在將一個方法調用請求沿著責任鏈依次轉發給下一個對象,讓每個對象都有一次機會決定自己是否處理該請求,從而降低請求的發送者與其接受者之間的耦合程度。

(1)個人理解:尋找責任的請求在鏈中傳遞,如果責任人已經找到則終止,否則繼續向其他對象轉發責任。

(2)提示代碼:

(3)提示關鍵字:轉發

6、Singleton(單例)模式:旨在確保某個類隻有一個實例,並且為之提供一個全局訪問點。

(1)個人理解:創建一個類的唯一實例,可以作為全局變量。

(2)提示代碼:

7、Observer(觀察者)模式:旨在在多個對象之間定義一對多的依賴關係,以便當一個對象狀態改變時,其他所有依賴這個對象的對象都能夠被通知,並自動更新。

(1)經典範例:GUI(MVC中分離M和VC)

(2)個人理解:當一個對象發生改變的時候,其他關心該對象的對象能夠得到通知,並且更新自身狀態。

(3)提示代碼:

(4)提示關鍵字:注冊,監聽

8、Mediator(中介者)模式:旨在定義一個對象來封裝一組對象之間交互的方式,這樣可避免對象間的顯示引用,而且還可以獨立對這些對象的交互進行修改。

(1)經典範例:GUI(特指MVC中的controller)

(2)個人理解:中介者類專門用於處理對象間的交互,與GUI的布局組件分離

(3)提示代碼:

9、Proxy(代理)模式:旨在為某個對象提供一個代理來控製對該對象的訪問。

(1)經典範例:圖像代理(長時間載入內存前的Loading提示)

(2)個人理解:提供一個代理來承擔責任(轉發請求),實際操作的對象並不是根本對象,而是一個用戶和真正實現之間的中間角色。

(3)提示代碼:

(4)提示關鍵字:占位

10、Flyweight(享元)模式:旨在通過共享來為大量的細粒度對象提供有效的支持。

(1)個人理解:很多類具有相同的且不變的屬性,可以將這些屬性提取出來構成享元,在一個特定的工廠類中作為內部類,具有static的get方法,便於外部類共享。

(2)提示代碼:

(3)提示關鍵字:共享對象

11、Builder(生成器)模式:旨在把構造對象實例的代碼邏輯移到要實例化的類的外部,以便於細化構造過程,或者簡化對象。

(1)經典範例:解析文本構造對象

(2)個人理解:用一個builder類收集構造信息,在確定信息足夠(或者滿足構造的最低要求)的時候,再生成對象。

(3)提示代碼:

(4)提示關鍵字:逐步構造

12、FactoryMethod(工廠方法)模式:旨在定義一個用於創建對象的接口,同時控製對哪個類進行實例化。

(1)經典範例:迭代器

(2)個人理解:為相關的多個類提供一個共同的接口,客戶不需要知道該實例化哪個類,具體實例化的類由服務的提供者決定。

(3)提示代碼:

(4)提示關鍵字:共同接口

13、AbstractFactory(抽象工廠)模式:旨在創建一係列相互關聯或相互依賴的對象。

(1)經典範例:GUI工具包

(2)個人理解:創建一係列相關的對象,也就是把創建一個大對象所需要的子操作聚合起來。

(3)提示代碼:

(4)提示關鍵字:外觀和感覺

14、Prototype(原型)模式:通過拷貝一個現有對象生成新的對象。

(1)個人理解:通過複製一個已經存在的對象,保存原來對象的狀態,在此基礎上進行進一步的改動。

(2)提示代碼:

(3)提示關鍵字:複製

15、Memento(備忘錄)模式:旨在為對象提供狀態存儲和狀態恢複功能。

(1)經典範例:撤銷操作

(2)個人理解:使用棧進行撤銷和恢複的操作,棧頂部是當前的狀態。更多的,可以把相關狀態進行持久性存儲。

(3)提示代碼:

(4)提示關鍵字:redo,undo

16、TemplateMethod(模板方法)模式:旨在一個方法中實現一個算法,並遵循算法中某些步驟的定義,從而使得其他類可以重新定義這些新步驟。

(1)經典範例:(根據不同規則)排序

(2)個人理解:在算法的實現中,把一些需要自定義的部分(通常是算法的核心部分),留在外部的類來實現。並可以需要實現的部分設置鉤子。