1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #define DESTORY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; }
  6.  
  7. class ProductFamilyA
  8. {
  9. public:
  10. virtual ~ProductFamilyA() {}
  11. virtual void Action()=;
  12.  
  13. protected:
  14. ProductFamilyA() {}
  15. };
  16.  
  17. class ProductFamilyB
  18. {
  19. public:
  20. virtual ~ProductFamilyB() {}
  21. virtual void Action()=;
  22.  
  23. protected:
  24. ProductFamilyB() {}
  25. };
  26.  
  27. class Factory
  28. {
  29. public:
  30. virtual ~Factory() {}
  31. virtual ProductFamilyA* CreateProductA()=;
  32. virtual ProductFamilyB* CreateProductB()=;
  33.  
  34. protected:
  35. Factory() {}
  36. };
  37.  
  38. class ProductA1 : public ProductFamilyA
  39. {
  40. public:
  41. ProductA1() {}
  42. void Action() { cout<<"ProductFamilyA->ProductA1::Action"<<endl; }
  43. };
  44.  
  45. class ProductA2 : public ProductFamilyA
  46. {
  47. public:
  48. ProductA2() {}
  49. void Action() { cout<<"ProductFamilyA->ProductA2::Action"<<endl; }
  50. };
  51.  
  52. class ProductB1 : public ProductFamilyB
  53. {
  54. public:
  55. ProductB1() {}
  56. void Action() { cout<<"ProductFamilyB->ProductB1::Action"<<endl; }
  57. };
  58.  
  59. class ProductB2 : public ProductFamilyB
  60. {
  61. public:
  62. ProductB2() {}
  63. void Action() { cout<<"ProductFamilyB->ProductB2::Action"<<endl; }
  64. };
  65.  
  66. class Factory1 : public Factory
  67. {
  68. public:
  69. ProductFamilyA* CreateProductA() { return new ProductA1; }
  70. ProductFamilyB* CreateProductB() { return new ProductB1; }
  71. };
  72.  
  73. class Factory2 : public Factory
  74. {
  75. public:
  76. ProductFamilyA* CreateProductA() { return new ProductA2; }
  77. ProductFamilyB* CreateProductB() { return new ProductB2; }
  78. };
  79.  
  80. int main(int argc, char *argv[])
  81. {
  82. Factory* pFactory = NULL;
  83. ProductFamilyA* pProductFamilyA = NULL;
  84. ProductFamilyB* pProductFamilyB = NULL;
  85.  
  86. pFactory = new Factory1;
  87.  
  88. pProductFamilyA = pFactory->CreateProductA();
  89. pProductFamilyB = pFactory->CreateProductB();
  90.  
  91. pProductFamilyA->Action();
  92. pProductFamilyB->Action();
  93.  
  94. DESTORY_POINTER(pFactory);
  95. DESTORY_POINTER(pProductFamilyA);
  96. DESTORY_POINTER(pProductFamilyB);
  97.  
  98. pFactory = new Factory2;
  99. pProductFamilyA = pFactory->CreateProductA();
  100. pProductFamilyB = pFactory->CreateProductB();
  101.  
  102. pProductFamilyA->Action();
  103. pProductFamilyB->Action();
  104.  
  105. DESTORY_POINTER(pFactory);
  106. DESTORY_POINTER(pProductFamilyA);
  107. DESTORY_POINTER(pProductFamilyB);
  108.  
  109. return ;
  110. }

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. Debian的定时执行命令Crontab

    转载:http://i.592.net/?post=276 Debian的定时执行命令Crontab,这个相当于Windows的计划任务 想要让Debian定时执行命令就得靠crontab了!     ...

  2. C# 数据的加密解密

    /// <summary> /// 加密数据 /// </summary> /// <param name="Text"></param& ...

  3. Coin Test

    描述 As is known to all,if you throw a coin up and let it droped on the desk there are usually three r ...

  4. [Java] Eclipse+Spring学习(一)环境搭建

    转自:http://blog.sina.com.cn/s/blog_7c3736810100qhia.html 最近由于投了一家公司实习,他要java工程师,而我大学3年的精力都花到了ASP.NET和 ...

  5. 【Android 界面效果16】关于android四大组件的总结

    Android四大组件:Activity.Service.Broadcast receiver.Content provider 在Android中,一个应用程序可以使用其它应用程序的组件,这是And ...

  6. 【python,threading】python多线程

    使用多线程的方式 1.  函数式:使用threading模块threading.Thread(e.g target name parameters) import time,threading def ...

  7. Ubuntu快速显示桌面的方法

    在Ubuntu环境下,按下Ctrl+D就能最小化所有窗口,立刻显示桌面,类似xp下的显示桌面按钮功能.不过这是需要经过快捷键设置的.以下是设置方法: 1.找到"系统设置" 2.进入 ...

  8. (二)u-boot2013.01.01 for TQ210:《Makefile分析》

           当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...

  9. python pdb调试

    在交互环境中通常使用pdb.run来调试: import pdb def pdb_test(arg): for i in range(arg): print(i) return arg pdb.run ...

  10. 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 585  Solved: 175[Subm ...