Creational.AbstractFactory抽象工厂模式:产品族易扩展,产品等级不易扩展

版权声明:本文为博主原创文章,允许转载,转载请注明出处。 https://blog.csdn.net/KnightOnHourse/article/details/79960131

//提供一个创建一系列相关相互依赖对象的接口,而无需指定它们具体的类

产品族和产品等级

产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构,功能相关联的产品组成的家族。如,AMD的主板、芯片组、CPU组成一个家族,Intel的主板、芯片组、CPU组成一个家族。

  ②产品等级结构产品等级结构即产品的继承结构。如抽象电视机与具体品牌的电视机之间构成了一个产品等级结构。如,AMD和Intel这两个家族都来自于三个产品等级:主板、芯片组、CPU。一个等级结构是由相同的结构的产品组成。

电脑装机方案


//创建型模式:抽象工厂模式
//电脑组装

////////////////////////////////////////////产品(等级)////////////////////////////
//产品等级1:
class CAbsCPU{
public:
    virtual void CalcAndCtrl() = 0;
};
class CIBMCPU : public CAbsCPU{
private:
    int iPints;//CPU针脚数
public:
    CIBMCPU(int pints);
    void CalcAndCtrl();
};
class CIntelCPU : public CAbsCPU{
private:
    int iPints;//CPU针脚数
public:
    CIntelCPU(int pints);
    void CalcAndCtrl();
};

//产品等级2
class CAbsMainboard{
public:
    virtual void InstallCPU() = 0;
};
class DPDLL_API CIBMMainboard : public CAbsMainboard{
private:
    int iHoles;//CPU插槽的孔数
public:
    CIBMMainboard(int holes);
    void InstallCPU();
};
class CIntelMainBoard : public CAbsMainboard{
private:
    int iHoles;//CPU插槽的孔数
public:
    CIntelMainBoard(int holes);
    void InstallCPU();
};

////////////////////////////////////////////工厂类////////////////////////////
//3.抽象工厂接口,声明创建抽象产品对象的操作
class CAbsComputerFac{
public:
    virtual CAbsCPU* GetCPU() = 0; //创建CPU对象
    virtual CAbsMainboard* GetMainboard() = 0;//创建主板对象
};

//3.1具体工厂(装机方案1)
class CIBMFac : public CAbsComputerFac{
public:
    CAbsCPU* GetCPU();
    CAbsMainboard* GetMainboard();
};
//3.2具体工厂(装机方案2)
class CIntelFac : public CAbsComputerFac{
public:
    CAbsCPU* GetCPU();
    CAbsMainboard* GetMainboard();

};

////////////////////////////////////////////产品(等级)////////////////////////////
//产品等级1:
CIBMCPU::CIBMCPU(int pints) : iPints(pints){}
void CIBMCPU::CalcAndCtrl(){ cout << "CPUType : IBM, CPUPints : " << iPints << endl;}
CIntelCPU::CIntelCPU(int pints) : iPints(pints){}
void CIntelCPU::CalcAndCtrl(){ cout << "CPUType : Intel, CPUPints : " << iPints << endl;}

//产品等级2
CIBMMainboard::CIBMMainboard(int holes) : iHoles(holes){}
void CIBMMainboard::InstallCPU() { cout << "MainboardType : IBM, MainboardHoles : " << iHoles << endl;}
CIntelMainBoard::CIntelMainBoard(int holes) : iHoles(holes){}
void CIntelMainBoard::InstallCPU(){ cout << "MainboardType : Intel, MainboardHoles : " << iHoles << endl;}
////////////////////////////////////////////工厂类////////////////////////////
//3.抽象工厂接口,声明创建抽象产品对象的操作
//3.1具体工厂(装机方案1)
CAbsCPU* CIBMFac::GetCPU(){return new CIBMCPU(1156);}
CAbsMainboard* CIBMFac::GetMainboard(){return new CIBMMainboard(1156);}
//3.2具体工厂(装机方案2)
CAbsCPU* CIntelFac::GetCPU(){return new CIntelCPU(939);}
CAbsMainboard* CIntelFac::GetMainboard(){return new CIntelMainBoard(939);}
 

//客户端调用例子
void main()
{    
    ////工厂
    CAbsComputerFac* pFac = new CIntelFac();
    CAbsCPU* pCPU = pFac->GetCPU();//CPU
    CAbsMainboard* pMainboard = pFac->GetMainboard();//主板
    if(pCPU != NULL && pMainboard != NULL){
        //测试一下配件是否正常
        pCPU->CalcAndCtrl();
        pMainboard->InstallCPU();
        delete pCPU;
        delete pMainboard;
    }
    delete pFac;
}


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页