????? 隨著對軟件工程研究的不斷深入,設計模式也越來越多了,根據其目的準則,劃分如下:
????? 1. 創建型:creational 與對象的創建有關。
????? 2. 結構型:Structural 處理類或對象之間的組合。
????? 3. 行為型:behavioral 描述類或對象如何交互及如何分配職責。
????? 創建型模式抽象了實例化的過程,將關于該系統使用的具體的類的信息封裝了起來。允許客戶用結構和功能差別很大的產品對象配置一個系統。配置可以是靜態的,也可以是動態的。
????? 通常創建對象的設計都是從工廠方法開始,當設計者發現需要更大的靈活性時,設計變回想其他創建型模式進行演化。
其中,創建型模式
????? 1.抽象工廠模式 AbstractFactory
????? 2.建造者模式 Builder
????? 3.工廠方法模式 Factory Method
????? 4.原型模式 Prototype
????? 5.單例模式 Singleton??
具體來說:
### 抽象工廠模式
????? 抽象工廠模式提供一個創建一系列或相關依賴對象的接口,而無需指定他們具體的類。抽象工廠是工廠方法模型的抽象,每一個具體工廠創建多個產品類的對象。具體工廠類與產品類是一對多的關系。所以具體工廠之間是采用了不同的方法,創建了相同的對象。
在“增加產品族”上,抽象工廠很好地支持了“開放-封閉原則”,但是在“增加新產品的等級結構”上,需要更改所有的工廠類。這有違背了“開放-封閉原則”。所以綜合來說,抽象工廠模型以一種傾斜的方式支持增加新的產品,它為新產品族的增加提供了方便,但不能為新產品的等級結構的增加提供同樣的方便。

### 建造者模式
????? 建造者模式是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。其中Builder定義了構建對象所需的“部件”或者說“步驟”,而ConcreteBuilder提供了幾種樣本的構建“模版”,Director是決定選擇哪個“模版”來構建產品。這就決定了建造者模型可以擔當構建復雜對象的重任,這些對象內部構建間的建造順序通常是穩定的,但對象內部的構建通常面臨著復雜的變化。
由于構建者隱藏了產品的構建細節,所以若要改變一個產品的內部表示,只需要再定一個具體的建造者就可以了。

### 工廠方法模式
????? 工廠方法模型定義了一個用于創建對象的接口,讓子類決定實例化哪一個類,工廠模式使一個類的實例化延遲到了其子類中。工廠方法模式是優化的簡單工廠模式,它很好的支持了“開閉原則”。每一個具體的工廠只能構建一個類的對象。具體工廠類與產品類是一對一的關系。

### ?原型模式
????? 原型模式是用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象,而無需知道具體的創建細節。
????? 建立相應數目的原型并克隆他們通常比每次用合適的狀態手工實例化該類更方便一些。
????? .NET在System命名空間中提供了Icloneable接口,可以通過該接口的Clone()方法來完成原型模式。在使用原型模式中應該注釋淺拷貝和深拷貝(針對與引用類型)。

### 單例模式
????? 單例模式保證一個類僅有一個實例,并提供一個訪問他的全局訪問點。單例模式必須自己創建自己的唯一實例。當一個系統要求某個類只要一個實例化對象,即可使用單例模式。
