#include <iostream>

using namespace std;

#define DESTORY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; }

class ProductFamilyA
{
public:
virtual ~ProductFamilyA() {}
virtual void Action()=; protected:
ProductFamilyA() {}
}; class ProductFamilyB
{
public:
virtual ~ProductFamilyB() {}
virtual void Action()=; protected:
ProductFamilyB() {}
}; class Factory
{
public:
virtual ~Factory() {}
virtual ProductFamilyA* CreateProductA()=;
virtual ProductFamilyB* CreateProductB()=; protected:
Factory() {}
}; class ProductA1 : public ProductFamilyA
{
public:
ProductA1() {}
void Action() { cout<<"ProductFamilyA->ProductA1::Action"<<endl; }
}; class ProductA2 : public ProductFamilyA
{
public:
ProductA2() {}
void Action() { cout<<"ProductFamilyA->ProductA2::Action"<<endl; }
}; class ProductB1 : public ProductFamilyB
{
public:
ProductB1() {}
void Action() { cout<<"ProductFamilyB->ProductB1::Action"<<endl; }
}; class ProductB2 : public ProductFamilyB
{
public:
ProductB2() {}
void Action() { cout<<"ProductFamilyB->ProductB2::Action"<<endl; }
}; class Factory1 : public Factory
{
public:
ProductFamilyA* CreateProductA() { return new ProductA1; }
ProductFamilyB* CreateProductB() { return new ProductB1; }
}; class Factory2 : public Factory
{
public:
ProductFamilyA* CreateProductA() { return new ProductA2; }
ProductFamilyB* CreateProductB() { return new ProductB2; }
}; int main(int argc, char *argv[])
{
Factory* pFactory = NULL;
ProductFamilyA* pProductFamilyA = NULL;
ProductFamilyB* pProductFamilyB = NULL; pFactory = new Factory1; pProductFamilyA = pFactory->CreateProductA();
pProductFamilyB = pFactory->CreateProductB(); pProductFamilyA->Action();
pProductFamilyB->Action(); DESTORY_POINTER(pFactory);
DESTORY_POINTER(pProductFamilyA);
DESTORY_POINTER(pProductFamilyB); pFactory = new Factory2;
pProductFamilyA = pFactory->CreateProductA();
pProductFamilyB = pFactory->CreateProductB(); pProductFamilyA->Action();
pProductFamilyB->Action(); DESTORY_POINTER(pFactory);
DESTORY_POINTER(pProductFamilyA);
DESTORY_POINTER(pProductFamilyB); return ;
}

Abstract_Factory的更多相关文章

  1. 【编程思想】【设计模式】【创建模式creational】抽象工厂模式abstract_factory

    Python版 https://github.com/faif/python-patterns/blob/master/creational/abstract_factory.py #!/usr/bi ...

  2. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  3. Functions

    Small The first rule of functions is that they should be small.The second rule of functions is that ...

  4. Abstract Factory 抽象工厂模式

    提供一个创建一些列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂顾名思义就是对工厂的抽象,它提供了一组创建抽象产品对象的操作接口,我们实际使用的是抽象工厂的派生类,派生类中提供了操作的具 ...

  5. 【创建型】Abstract Factory模式 & Factory Method模式

    本文主要介绍简单工厂模式与抽象工厂模式.以下如有叙述不当之处,欢迎批评指正,欢迎交流探讨. 一:简单工厂模式 在23种设计模式中,简单工厂模式其实是不在列的,但理解该模式对于抽象工厂模式的思想理解是有 ...

  6. Java设计模式之简单工厂、工厂方法和抽象工厂

    在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...

  7. 设计模式——抽象工厂模式(C++实现)

    #include <iostream> #include <string> using namespace std; class STAbstractProductA { pu ...

  8. 线程异步操作,更新其中一个报错不影响另一个的运行(Task )

    //子系统同步更新                BD001_BLL bll = new BD001_BLL();                List<BD001_Model> lis ...

  9. 《大话设计模式》c++实现 抽象工厂模式

    为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间 ...

随机推荐

  1. laravel 5.0 artisan 命令列表(中文简体)

    #php artisan list Laravel Framework version Usage: [options] command [arguments] Options(选项): --help ...

  2. 1.7.4.3 Parsers

    Parsers 除了主查询解析器外,还有一些其他的查询解析器可以使用或者和主查询解析器连合使用.这部分描述了其他查询解析器的细节,并且给出了一些例子: 大多数的解析器都可以使用局部查询参数的方式来表达 ...

  3. DIH中添加不同的数据源

    需求:从mysql数据库中读取一个知识记录,从记录表中的字段值中获取一个文件路径,读取xml文件,xml文件中可能包含多个文档内容.建立索引. xml文件样例: <?xml version=&q ...

  4. Tested work with China Digiprog 3 4.94 mileage programmer

    I was thinking about buying a Digiprog3 clone from China I know that YANHUA Digiprog 3 is the best a ...

  5. 【阿里云产品公测】在Laravel4框架中使用阿里云OCS缓存

    作者:阿里云用户 supechina Laravel 是我最近用得非常多而且越用就越喜欢的一款PHP框架,由于没有向下兼容的历史包袱,完全面向对象的风格,借助 Facades 优雅的 IoC Cont ...

  6. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Android Auto对比CarPlay 2014-12-29

    Google和苹果都试图给用户的汽车带来一个安全和友好的移动体验.Android Auto和CarPlay是这两家公司推出的专为车载而重新设计的移动用户界面,双方目前都在筹备着在明年正式大规模推广. ...

  7. Oracle基础 exp/imp命令

    一.导出方式: 使用exp/imp方式导出数据分为四种方式: 1.表方式导出:一个或多个指定的表,包括表的定义.表数据.表的所有者授权.表索引.表约束,以及创建在该表上的触发器.也可以只导出结构,不导 ...

  8. 【CSS】class和id命名规则

    说明,本篇内容为书籍<高流量网站CSS开发技术>的学习总结,文字出自书本 书不错,推荐阅读学习 也可参阅网上的博文 原载:彬Go链接:http://blog.bingo929.com/cs ...

  9. Python-Networkx

    import networkx #建图 G = networkx.Graph() #节点数: len(G) #边数 G.number_of_edges() #节点表 G.nodes() #边表 G.e ...

  10. 剑指Offer02 替换空格

    /************************************************************************* > File Name: 02_Replac ...