Factory:
問題:
1.爲了提高內聚(cohesion)和鬆耦合(Coupling),經常會抽象出一些類的公共接口以形成抽象基類或接口.可以通過聲明一個向基類的指針來指向實際的子類實現,達到多態目的.1)客戶程序員必須知道實際子類的名稱,2)程序的擴展性和維護變得越來越困難;
2.在父類中並不知道具體要實例化哪一個具體的子類:假設類A中要使用到類B,B是一個抽象父類,在A中並不知道具體要實例化哪一個B的子類,但是在A的子類D中是可以知道的.
以上2個問題引出了Factory模式的2個最重要的功能:1.定義創建對象的接口,封裝了對象的創建;2.使得具體化類的工作延遲到了子類中;
AbstractFactory:
AbstractFactory模式和Factory模式的區別:
AbstractFactory模式是爲創建一組(有多類)相關或依賴的對象提供創建接口,而Factory模式是爲一類對象提供創建接口或延遲對象的創建到子類中實現;
SingleTon:
通過維護一個static的成員變量來記錄這個唯一的對象實例.通過提供一個static的接口instance來獲得這個唯一的實例
Static Singleton* _instance;
Static Singleton* Instance()
{
If (_instance == 0)
_instance = new Singleton();
Return _instance;
}
單件模式主要應用在以下場合:
對於一個類,佔用的系統資源非常多。而且這些資源可以被全局共享,則可以設計爲singleton模式,強迫全局只有一個實例
對於一個類,需要對實例進行計數。可以在createInstance中進行
並可以對實例的個數進行限制。
對於一個類,需要對其實例的具體行爲進行控制,例如,期望返回的實例實際上是自己子類的實例。這樣可以通過Singleton模式,對客戶端代碼保持透明。
Builder:
將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.
Builder模式是一步一步創建一個複雜的對象,它允許用戶可以只通過指定複雜對象的類型和內容就可以構建它們.用戶不知道內部的具體構建細節.
其實建造者模式就是用來創建複合對象,並把複合對象的創建過程加以抽象,通過子類繼承和重載的方式,動態地創建具有複合屬性的對象。
ProtoType:
提供一個通過已存在對象進行新對象創建的接口(Clone)
Prototype* Clone() const
{
Return new ConcretePrototype(*this);
}
使用:
Prototype* p = new ConcretePrototype();
Prototype* p1 = p->Clone();