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

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

产品族和产品等级

产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构,功能相关联的产品组成的家族。如,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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值