Creational.AbstractFactory(创建型模式—抽象工厂模式)

标签: DesignPattern(程序设计的指导思想)
6人阅读 评论(0) 收藏 举报
分类:

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

产品族和产品等级

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


查看评论

23种设计模式----创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)

1.单例模式  单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自己实例化并向整个系统提供这个实例。   通用类图如下:      通用代码如下:public cl...
  • oChangWen
  • oChangWen
  • 2017-06-17 21:37:07
  • 709

工厂模式(工厂方法模式,抽象工厂模式) Java

工厂模式分为3类: * 简单工厂模式 Simple Factory * 工厂方法模式 Factory Method * 抽象工厂模式 Abstract Factory thinking in ...
  • power0405hf
  • power0405hf
  • 2016-10-07 22:10:25
  • 1797

C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

  • 2009年08月20日 15:43
  • 6.93MB
  • 下载

李建忠 C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)

  • 2008年10月16日 09:56
  • 9.3MB
  • 下载

创建型模式:【抽象工厂模式】

抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的...
  • sxjxrxm
  • sxjxrxm
  • 2017-08-28 15:51:39
  • 91

创建型模式----抽象工厂模式

1、抽象工厂模式          简单工厂模式存在的问题:                     类实例的创建依赖工厂类,也就是说,如果想拓展程序,必须对工厂类进行修改,这违背了闭包原则。 ...
  • u010150082
  • u010150082
  • 2013-08-30 16:10:08
  • 621

创建型模式-抽象工厂模式

抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一...
  • u012930316
  • u012930316
  • 2017-01-18 12:10:24
  • 120

创建型模式——抽象工厂模式

1.由来 2.定义 3.代码的实现 4.模式的优点 5.模式的缺点 6.应用场景 参考文献:http://design-patterns.readthedocs.io/...
  • u013424496
  • u013424496
  • 2016-07-05 10:30:35
  • 393

创建型模式--抽象工厂模式

概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。  适用性 1.一个系统要独立于它的产品的创建、组合和表示时。 2.一个系统要由多...
  • GULINHAI12
  • GULINHAI12
  • 2014-12-22 21:44:49
  • 1776

[创建型模式:抽象工厂模式]

故事:第一次接触这个模式是在大学读书的时候,为了解决跨库的问题,就是自己写的程序兼容两个数据库即:一个是SQL库,一个是ORACLE库,自己一直理解为代码运行的时候,动态调用不同的类库,不同的类,其实...
  • caikundashu
  • caikundashu
  • 2011-10-30 15:44:23
  • 545
    个人资料
    等级:
    访问量: 1243
    积分: 690
    排名: 7万+
    文章存档