天天看點

設計模式分類 在《設計模式》這本書中列舉并描述了23種設計模式,分為建立型模式、結構型模式和行為型模式。另外,近來這一清單又增加了一些類别,例如,并發型模式、線程池模式、Java EE企業技術的多層應用程式上的模式等。下面來看看每一種類型包含哪些設計模式

一 建立型模式

GoF中共描述了5種建立型模式。

1.工廠方法模式(Factory Method)

定義一個接口用于建立對象,但是讓子類決定初始化哪個類。工廠方法把一個類的初始化下放到子類。

2.抽象工廠模式(Abstract Factory)

為一個産品族提供了統一的建立接口。當需要這個産品族的某一系列的時候,可以從抽象工廠中選出相應的系列建立一個具體的工廠類。

3.單例模式(Singleton)

確定一個類隻有一個執行個體,并提供對該執行個體的全局通路。

4.建造者模式(Builder)

将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。

5.原型模式(Prototype)

用原型執行個體指定建立對象的種類,并且通過複制這些原型建立新的對象。

此外,擴充的建立型模式還包括如下。

1) 懶惰初始化模式:推遲對象的建立、資料的計算等需要耗費較多資源的操作,隻有在第一次通路的時候才執行。

2) 對象池模式:通過回收利用對象避免擷取和釋放資源所需的昂貴成本。

二 結構型模式

GoF中共描述了7種結構型模式。

1.擴充卡模式(Adapter)

将某個類的接口轉換成用戶端期望的另一個接口表示。擴充卡模式可以消除由于接口不比對所造成的類相容性問題。

2.裝飾器模式(Decorator)

向某個對象動态地添加更多的功能。裝飾器模式是除類繼承外另一種擴充功能的方法。

3.代理模式(Proxy)

為其他對象提供一個代理以控制對這個對象的通路。

4.外觀模式(Facade)

為子系統中的一組接口提供一個一緻的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

5.橋接模式(Bridge)

将一個抽象與實作解耦,以便兩者可以獨立變化。

6.組合模式(Composite)

把多個對象組成樹狀結構來表示局部與整體,這樣使用者可以一樣地對待單個對象和對象的組合。

7.享元模式(Flyweight)

通過共享以便有效地支援大量小顆粒對象。

此外,擴充的結構型模式還包括如下。

1) 單次通路者(Single-serving Visitor):優化被配置設定的執行通路者,讓它隻使用一次然後删除。

2) 層次通路者(Hierarchical Visitors):提供一種方法通路每個節點層次的資料結構,如一棵樹。

三 行為型模式

GoF中共描述了11種行為型模式。

1.政策模式(Strategy)

定義一個算法的系列,将其各個分裝,并且使它們有互動性。政策模式使得算法在使用者使用的時候能獨立改變。

2.模闆方法模式(Template Method)

模闆方法模式準備一個抽象類,将部分邏輯以具體方法及具體構造子類的形式實作,然後聲明一些抽象方法來迫使子類實作剩餘的邏輯。不同的子類可以以不同的方式實作這些抽象方法,進而對剩餘的邏輯有不同的實作。先建構一個頂級邏輯架構,而将邏輯的細節留給具體的子類去實作。

3.觀察者模式(Observer)

在對象間定義一個一對多的聯系,當一個對象改變了狀态時,所有其他相關的對象會被通知并且自動重新整理。

4.疊代子模式(Iterator)

提供一種方法順序通路一個聚合對象中的各個元素,而又不需暴露該對象的内部表示。

5.責任鍊模式(Chain of Responsibility)

為解除請求的發送者和接收者之間的耦合,而使多個對象都有機會處理這個請求,需要将這些對象連成一條鍊,并沿着這條鍊傳遞該請求,直到有一個對象處理它。

6.指令模式(Command)

将一個請求封裝為一個對象,進而使使用者可用不同的請求對客戶進行參數化,對請求排隊或記錄請求日志,以及支援可取消的操作。

7.備忘錄模式(Memento)

備忘錄對象是一個用來存儲另外一個對象内部狀态的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,将一個對象的狀态捉住,并外部化,存儲起來,進而可以在将來合适的時候把這個對象還原到存儲起來的狀态。

8.狀态模式(State)

讓一個對象在其内部狀态改變的時候,其行為也随之改變。狀态模式需要對每一個系統可能取得的狀态創立一個狀态類的子類。當系統的狀态變化時,系統便改變所選的子類。

9.通路者模式(Visitor)

封裝一些施加于某種資料結構元素之上的操作。一旦這些操作需要修改,接受這個操作的資料結構可以保持不變。通路者模式适用于資料結構相對未定的系統,它把資料結構和作用于結構上的操作之間的耦合解脫開,使得操作集合可以相對自由的演化。

10.中介者模式(Mediator)

包裝了一系列對象互相作用的方式,使得這些對象不必互相明顯作用,進而使它們可以松散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用,保證這些作用可以彼此獨立的變化。

11.解釋器模式(Interpreter)

給定一個語言,定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子。

四 并發型模式

後來擴充的并發型模式有:

1 主動對象模式(Active Object)。

2 阻礙模式(Balking)。

3 雙重檢查鎖定(Double Checked Locking)。

4 守衛模式(Guarded)。

5 上司者/追随者模式(Leaders/Followers)。

6 監測對象模式(Monitor object)。

7 讀寫鎖模式(Read write lock)。

8 排程模式(Scheduler)。

五 線程池模式

後來擴充的線程池模式有:

1 線程特定存儲模式(Thread-Specific Storage)。

2 反應器(Reactor)。

本文轉自夏雪冬日部落格園部落格,原文連結:http://www.cnblogs.com/heyonggang/p/3378732.html,如需轉載請自行聯系原作者