天天看點

《深入淺出設計模式》小結

       由于最近參加筆試的原因,我感覺到了學習“設計模式”的重要性。為此,我從網上下載下傳了一份資料,叫做《深入淺出設計模式》。在這份資料中,作者一共提到了22種設計模式,大緻按照“引言”->“定義/分類”->“程式實作”->“執行個體”->“小結”的順序将各“設計模式”為我們簡要地一一道來。雖然之前沒有學過這門課程,我還是覺得受益頗多。

       為了幫助自己記憶,同時讓大家了解這22種“設計模式”到底有哪些,我将各模式的定義與分類等總結如下。

1.        工廠模式(靜态工廠模式、工廠方法模式或抽象工廠模式)

1)        定義:工廠模式主要是為建立對象提供過渡接口,以便将建立對象的具體過程屏蔽隔離起來,達到提高靈活性的目的;

2)        分類:分為三類,即簡單工廠模式(Simple Factory)、工廠方法模式(Factory Method)和抽象工廠模式(Abstract Factory)。

2.        單例模式(單态模式或單件模式)

1)        定義:保證一個類僅有一個執行個體,并提供一個通路它的全局通路點;其目的就是要控制特定的類隻産生一個對象,當然也允許在一定情況下靈活地改變對象的個數;

2)        分類:分為有狀态的和無狀态的。

3.        建造模式

1)        定義:将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示;也可以了解為:将構造複雜對象的過程群組成對象的部件解耦。

4.        原型模式

1)        定義:它屬于對象建立模式,它用原型執行個體指定建立對象的種類,并且通過拷貝這些原型建立新的對象。

5.        擴充卡模式(Adapter)

1)        定義:将一個類的接口轉換成客戶希望的另外一個接口,該模式使得原本由于接口不相容而不能一起工作的那些類可以一起工作;它可以實作在面向接口程式設計中更好的複用;

2)        分類:分為類擴充卡模式和對象擴充卡模式。

6.        橋梁模式(Bridge)

1)        定義:它将抽象部分與其實作部分分離,使它們都可以獨立地變化。

7.        組合模式(Composite)

1)        定義:将對象以樹形結構組織起來,以達成“部分-整體”的層次結構,使得用戶端對單個對象群組合對象的使用具有一緻性。

8.        裝飾模式

1)        定義:裝飾模式(Decorator)也叫包裝器模式(Wrapper),它動态地給一個對象添加一些額外的職責。

9.        門面模式

1)        定義:門面模式(façade)又稱外觀模式,它為子系統中的一組接口提供一個一緻的界面;該模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

10.    享元模式(Flyweight Pattern)

1)        定義:采用一個共享類來避免大量擁有相同内容的“小類”的開銷,它區分了内蘊狀态和外蘊狀态,内蘊狀态就是共性,外蘊狀态就是個性;

2)        分類:單純享元模式和複合享元模式。

11.    代理模式(Proxy Pattern或Surrogate Pattern)

1)        定義:它為其它對象提供一種代理以控制對這個對象的通路;

2)        分類:分為8種,常見的有:遠端(Remote)代理、虛拟(Virtual)代理、保護(Protect或Access)代理和智能引用(Smart Reference)代理。

12.    責任鍊模式

1)        定義:使多個對象都有機會處理請求,進而避免請求的發送者和接收者之間的耦合關系;将這些對象連成一條鍊,并沿着這條鍊傳遞該請求,直到有一個對象處理它為止。

13.    指令模式

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

14.    解釋器模式

1)        定義:定義語言的文法,并且建立一個解釋器來解釋該語言中的句子;如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得将該問題的各個執行個體表述為一個簡單語言中的句子;這樣就可以建構一個解釋器,該解釋器通過解釋這些句子來解決該問題。

15.    疊代器模式

1)        定義:疊代器(Iterator)模式,又叫做遊标(Cursor)模式,它提供一種方法通路一個容器(container)對象中各個元素,而又不需暴露該對象的内部細節。

16.    調停者模式(Mediator Pattern)

1)        定義:用一個調停對象來封裝一系列的對象互動;将原來兩個直接引用或者依賴的對象拆開,在中間加入一個“調停”對象,使得兩頭的對象分别和“調停”對象引用或者依賴。

17.    備忘錄模式

1)        定義:備忘錄(Memento)模式又稱标記(Token)模式,它不破壞封裝性的前提下,捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态;這樣以後就可将該對象恢複到原先儲存的狀态。

18.    觀察者模式

1)        定義:觀察者(Observer)模式又名釋出-訂閱(Publish/Subscribe)模式,它定義對象間的一種一對多的依賴關系,當一個對象的狀态發生改變時,所有依賴于它的對象都得到通知并被自動更新。

19.    政策模式(Strategy)

1)        定義:它屬于對象行為型設計模式,主要是定義一系列的算法,把這些算法一個個封裝成擁有共同接口的單獨的類,并且使它們之間可以互換。

20.    狀态模式(State)

1)        定義:允許一個對象在其内部狀态改變時改變它的行為。

21.    模闆模式(Template Method)

1)        定義:它定義一個操作中的算法的骨架,而将一些步驟延遲到子類中,使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。

22.    通路者模式(Visitor)

1)        定義:使用了這個模式後就可以在不修改已有程式結構的前提下,通過添加額外的“通路者”來完成對已有代碼功能的提升;表示一個作用于某對象結構中的各元素的操作,它使使用者可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

       總的說來,各模式均有其适用條件及其優缺點,我們需要在具體的應用場合來靈活地選用合适的設計模式。

繼續閱讀