動機
- 在軟件系統(tǒng)中,經(jīng)常面臨一系列相互依賴的對象的創(chuàng)建工作。同時由于需求的變化,往往存在更多系列對象的創(chuàng)建工作
定義
- 提供一個接口,讓該接口負責(zé)創(chuàng)建一系列相關(guān)或者相互依賴的對象,無需指定它們具體的類
要點
- 如果沒有應(yīng)對多系列對象構(gòu)建的需求變化,則沒有必要使用抽象工廠模式,這時候使用簡單的工廠完全可以
- 系列對象指的是在某一特定系列下的對象之間有相互依賴、作用的關(guān)系。不同系列的對象之間不能相互依賴
- 抽象工廠模式主要在于應(yīng)對新系列的需求變動。缺點在于難以應(yīng)對新對象的需求變動
示例
#include <cstdio>
//CBasePrint 與 CBaseDeal 是具有關(guān)聯(lián)關(guān)系的類,經(jīng)常需要一起被創(chuàng)建
class CBasePrint
{
public:
virtual ~CBasePrint() {}
virtual void Print() = 0;
};
class CChild_Print_0 : public CBasePrint
{
public:
virtual void Print() { printf("P 0\n"); }
};
class CChild_Print_1 : public CBasePrint
{
public:
virtual void Print() { printf("P 1\n"); }
};
class CBaseDeal
{
public:
virtual ~CBaseDeal() {}
virtual void Deal() = 0;
};
class CChild_Deal_0 : public CBaseDeal
{
public:
virtual void Deal() { printf("D 0\n"); }
};
class CChild_Deal_1 : public CBaseDeal
{
public:
virtual void Deal() { printf("D 1\n"); }
};
//抽象工廠,負責(zé)一系列相關(guān)對象的創(chuàng)建工作
class CFactoryBase
{
public:
virtual ~CFactoryBase() {}
virtual CBasePrint* CreatePrint() = 0;
virtual CBaseDeal* CreateDeal() = 0;
};
class CFactory_0
{
public:
virtual CBasePrint* CreatePrint() { return new CChild_Print_0; }
virtual CBaseDeal* CreateDeal() { return new CChild_Deal_0; }
};
class CFactory_1
{
public:
virtual CBasePrint* CreatePrint() { return new CChild_Print_1; }
virtual CBaseDeal* CreateDeal() { return new CChild_Deal_1; }
};
int main()
{
CFactory_0 Factory0;
CFactory_1 Factory1;
Factory0.CreatePrint()->Print(); //P 0
Factory0.CreateDeal()->Deal(); //D 0
Factory1.CreatePrint()->Print(); //P 1
Factory1.CreateDeal()->Deal(); //D 1
return 0;
}
https://www.bilibili.com/video/av24176315/?p=9
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。