設計模式分類及各模式簡介
設計模式分為建立型、結構型和行為型三種。其中建立型模式與物件的建立有關;結構型模式用於處理類和物件的組合;行為型模式描述類或物件怎樣互動和怎樣分配職責。
一.建立型:
-
原型(Prototype)模式:用原型例項指定建立物件的種類,並且通過拷貝這個原型來建立新的物件。原型模式又可以分為兩種:淺克隆和深克隆。淺克隆僅僅複製所考慮的物件,而不復制它所引用的物件,也就是其中的成員物件並不複製;深克隆除了物件本身被複制外,物件包含的引用也被複制,即成員物件也被複制。
-
單例(Singleton)模式:指系統執行過程中,一個類只有一個物件例項。
-
工廠方法(Factory Method):定義一個用於建立物件的介面,讓子類決定將哪一個類例項化,使一個類的例項化延遲到其子類。
-
抽象工廠 (Abstract Factory)模式:提供一個建立一系列相關或相互依賴物件的介面, 而無需指定它們具體的類。
-
生成器(Builder)模式(建造者模式):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
二.行為型:
-
責任鏈(Chain of Responsibility)模式:使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係,將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有一個物件處理它為止。
-
命令(Command)模式:將一個請求封裝為一個物件,從而使得使用者可以採用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
-
觀察者(Observer)模式:定義物件間的一種一對多的依賴關係,當一個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。一個作用於某物件結構中的各元素的操作,是使用者可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
-
策略(Strategy)模式適用於:策略模式定義了一系列演算法,並將每個演算法封裝起來,而且使它們可以相互替換。 策略模式讓演算法獨立於使用它們的客戶而變化。適用於需要在不同情況下使用不同的策略(演算法),或者策略還可能在未來用其他方式來實現。
-
狀態模式:允許一個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。狀態模式主要解決的是控制一個物件轉換的條件表示式過於複雜的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。狀態模式的好處是將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。
三.結構型:
-
介面卡(Adapter)模式:將一個類的介面轉換成客戶希望的另外一個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
-
橋接(Bridge)模式:將抽象部分與其實現部分分離,使它們都可以獨立地變化。
-
組合(Composite)模式:將物件組合成樹形結構以表示“部分一整體”的層次結構, 使得使用者對單個物件和組合物件的使用具有一致性。
-
裝飾器(Decorator)模式:描述了以透明圍欄來支援修飾的類和物件的關係,動態地給一個物件新增一些額外的職責,從增加功能的角度來看,裝飾器模式相比生成子類更加靈活。
-
外觀(Facade)模式(門面模式):為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。適用於需要為一個複雜子系統提供一個簡單介面的情況。
-
代理(Proxy)模式:為其他物件提供一種代理以控制對這個物件的訪問,使得只有在確實需要這個物件時才對其進行建立和初始化。
-
享元(Flyweight)模式:共享大量細粒度的物件;