1. 程式人生 > >24種設計模式複習總結

24種設計模式複習總結

Factory Pattern(工廠模式):1. 建立物件的介面,封裝物件的建立;2. 使具體化類的工作延遲到子類中。(維護一類物件)

AbstractFactory Pattern(抽象工廠 模型):該模式將一組物件的建立封裝到一個用於建立物件的類中。(解決的問題:要建立一組或者相互依賴的物件)。


Singleton Pattern(單例模式):該模式在面向純粹的面向物件的正規化中用於建立唯一的例項,值得注意的是Singleton不能被例項化,因此將其建構函式宣告為protected或private型別。Singleton Pattern經常與Factory Pattern結合使用,因為Factory物件只能有一個。



Builder Pattern(建立者模式):將一個複雜的物件的構建與它的表示分離,使得同樣的構建構成可以建立不同的表示。如建築師畫圖紙,而工人建造房屋。


Prototype Pattern(原型模式):提供一個通過已存在物件進行新物件建立的介面(clone)。(淺拷貝和深拷貝)



Bridge Pattern(橋樑模式):將抽象部分與實現部分分開實現,使他們都可以獨立地變化,並使用組合的方式將多維度的抽象方法聯絡在一起。比如咖啡分小杯、中杯、大杯以及加奶和不加奶,則抽象部分為:小杯、中杯、大杯,行為為:加奶和不加奶。

Adapter Pattern(介面卡模式):適配就是由“源”到“目標”的適配,而當中連結兩者的關係就是介面卡。它負責把“源”過度到“目標”。將一個類的介面轉換成客戶希望的另外一個介面。

Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。介面卡模式分為兩種:① 面向類的設計模式;② 面向物件的設計模式。

① 面向類的介面卡:該模式使用繼承和介面實現的方式複用需要介面卡的類。

② 面向物件的介面卡:該模式使用組合的方式實現需要複用的類。



 Decorator模式(裝飾模式):動態地給一個物件新增一些額外的職責。



Composite模式(組合模式):將物件組合成樹形結構以表示“部分-整體”的層次結構。Composite使得使用者對單個物件和組合物件的使用具有一致性。


Flyweight模式(享元模式):使用共享技術實現元素的共享。


Facade模式(外觀模式):要求一個子系統的外部與其內部的通訊必須通過一個統一的Facade物件進行。Facade模式提供一個高層次的介面,使得子系統更易於使用。  



 Proxy模式(代理模式):不通過要操作物件本身去操作這個物件,而是通過一個能控制這個物件的物件(代理)去操作這個物件。


Template模式(模板模式):邏輯框架相同,但是對某一個業務邏輯(演算法實現)在不同的物件中有不同的實現方式。Template採用繼承的方式實現這一點(strategy模式採用組合的方式去解決)。



Strategy模式(策略模式):解決與Template模式相同(類似)的問題。Strategy模式將邏輯(演算法)封裝到一個類中,通過組合的方式將具體演算法的實現在組合物件中實現,通過委託的方式將抽象介面的實現委託給組合物件實現。



State模式(狀態模式):人或事物有不同的狀態,每種狀態又有其特定的表現,在這些狀態下又使一個狀態轉移到另一個不同的狀態。



Observer模式(觀察者模式):Observer模式定義物件間的一對多的依賴關係,當一個物件的狀態發生改變時, 所有依賴於它的物件都得到通知並被自動更新。(如檢視-文件)


Memento模式(備忘模式):在不破壞封裝性的情況下,捕獲並儲存一個類的內部狀態,可以利用該儲存的狀態實施恢復操作。


Mediator模式(中介者模式):用一箇中介物件來封裝一系列關於物件互動行為。如MVC中的Controller。



Command模式(命令模式):命令模式是對命令的封裝。命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的物件。


Visitor模式(訪問者模式):在不改變原有類結構的基礎上不斷新增新的功能。缺點:破壞了封裝性;Concretement擴充套件困難:每新增一個Element的子類,就要修改Visitor的介面,使得可以提供給這個新增加的子類的訪問機制。


Chain of Responsibility模式(職責鏈模式):Chain of Responsibility(CoR) 是用一系列類(classes)試圖處理一個請求request,這些類之間是一個鬆散的耦合,唯一共同點是在他們之間傳遞request. 也就是說,來了一個請求,A類先處理,如果沒有處理,就傳遞到B類處理,如果沒有處理,就傳遞到C類處理,就這樣象一個鏈條(chain)一樣傳遞下去。


Iterator模式(迭代模式):提供一種方法訪問一個容器(container)物件中各個元素,而又不需暴露該物件的內部細節。具體應用容器類(Vector、Set等)。


Interpreter模式(直譯器模式):給定一個語言,定義它的文法的一種表示,並定義一個直譯器,這個直譯器使用該表示來解釋語言中的句子。

直譯器模式需要解決的是,如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為一個簡單語言中的句子。這樣就可以構建一個直譯器,該直譯器通過解釋這些句子來解決該問題。例項應用:正則表示式。


最後:各個模式的使用不一定是相互獨立,而是可以融合。