抽象工廠

動機

  • 在軟件系統(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ù)。

友情鏈接更多精彩內(nèi)容