小言:這不是設計模式講解型博文,以下將設計模式的概述、類圖,代碼示例,總結分每篇博文單獨展示,現將其歸類,便于以后翻閱,設計模式也不是一兩個月學完了就能完全領悟,它只告訴我們幾個解決問題的思路和方法,將具體問題抽象為模型的思想,武功也是,套路需要學,但是基本功(如馬步、力量,毅力,抗打擊能力)絕對不可或缺,在學習設計模式的同時更需要看看數據結構和算法方面的基礎東東。設計模式不是銀彈,如果非要用降龍十八掌對付一只螞蟻不是一個好想法。本人也是學藝不精,整理當中難免有錯誤,希望在大家的批評指正,共同進步。
一、創建型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- 工廠方法(FactoryMethod)
? ? ? ? ? ?定義一個用于創建對象的接口,讓子類決定實例化哪一個類。
? ? ? ? ? ?FactoryMethod使一個類的實例化延遲到其子類。
- 抽象工廠(AbstractFactory)
? ? ? ? ?提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
- 建造者(Builder)
? ? ? ? ?將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
- 單例模式(Singleton)
? ? ? ? ?保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
- 原型模式(Prototype)
? ? ? ? ? 用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。
二、結構型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- 適配器模式(Adapter)
? ? ? ? ? 將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本
? ? ? ? ? 由于接口不兼容而不能一起工作的那些類可以一起工作。
- 橋接模式(Bridge)
? ? ? ? ? 將抽象部分與它的實現部分分離,使它們都可以獨立地變化。
- 組合模式(Compsite)
? ? ? ? ? 將對象組合成樹形結構以表示"部分-整體"的層次結構。
? ? ? ? ? "Composite使得用戶對單個對象和組合對象的使用具有一致性。"
- 裝飾模式(Decorator)
? ? ? ? ? 動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活
- 外觀模式(Facade)
? ? ? ? ?為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,
? ? ? ? ?這個接口使得這一子系統更加容易使用。
- 享元模式(Flyweight)
? ? ? ? ? 運用共享技術有效地支持大量細粒度的對象。
- 代理模式(Proxy)
? ? ? ? ? 為其他對象提供一種代理以控制對這個對象的訪問。
二、行為型模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
- 責任鏈模式(Chain Of Responsibility)
? ? ? ? ?使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。
? ? ? ? ?將這些對象連成一條鏈,?并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
- 命令模式(Command)
? ? ? ? ? 將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;
? ? ? ? ? 對請求排隊或記錄請求日志,以及支持可撤消的操作。
- 解釋器模式(Interpreter)
? ? ? ? ? 給定一個語言,定義它的文法的一種表示,并定義一個解釋器,
? ? ? ? ? 這個解釋器使用該表示來解釋語言中的句子。
- 迭代器模式(Iterator)
? ? ? ? ? 提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。
- 中介者模式(Mediator)
? ? ? ? ? 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,
? ? ? ? ? 從而使其耦合松散,而且可以獨立地改變它們之間的交互。
- 備忘錄模式(Memento)
? ? ? ? ? 在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。
? ? ? ? ? 這樣以后就可將該對象恢復到原先保存的狀態。
- 觀察者模式(Observer)
? ? ? ? ?定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,
? ? ? ? ?所有依賴于它的對象都得到通知并被自動更新。
- 狀態模式(State)
? ? ? ? ? 當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。
- 策略模式(Strategy)
? ? ? ? ? 定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。
? ? ? ? ? 本模式使得算法可獨立于使用它的客戶而變化。
- 模板方法(TemplateMethod)
? ? ? ? ? 定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。
? ? ? ? ? TemplateMethod使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
- 訪問者模式(Visitor)
? ? ? ? ? 表示一個作用于某對象結構中的各元素的操作。
? ? ? ? ? 它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。
附上每一個模式的代碼示例,每一種模式示例代碼都通過調試,調試環境vs2010
下載地址:http://files.cnblogs.com/jqbird/DesignPatternLab.rar