Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167717
  • 博文数量: 60
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 638
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:59
个人简介

喜欢coding,因为那是一件伟大的事情,是将无生命的IC赋予灵魂的过程,让我拥有了和上帝一样的成就感。(w1c2g3@163.com)

文章分类

全部博文(60)

文章存档

2017年(7)

2016年(41)

2015年(1)

2014年(4)

2013年(7)

我的朋友

分类: C/C++

2016-10-30 22:45:14

抽象工厂模式 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。




  1. #include <iostream>
  2. #include <string>


  3. using namespace std;


  4. struct AbstractProductA {
  5. public:
  6.     virtual void operationA() = 0;
  7. };

  8. struct ProductA_1 : public AbstractProductA {
  9. public:
  10.     void operationA() {
  11.         cout << "ProductA_1" << endl;
  12.     }
  13. };

  14. struct ProductA_2 : public AbstractProductA {
  15. public:
  16.     void operationA() {
  17.         cout << "ProductA_2" << endl;
  18.     }
  19. };


  20. struct AbstractProductB {
  21. public:
  22.     virtual void operationB() = 0;
  23. };

  24. struct ProductB_1 : public AbstractProductB {
  25. public:
  26.     void operationB() {
  27.         cout << "ProductB_1" << endl;
  28.     }
  29. };

  30. struct ProductB_2 : public AbstractProductB {
  31. public:
  32.     void operationB() {
  33.         cout << "ProductB_2" << endl;
  34.     }
  35. };


  36. struct AbstractFactory {
  37. public:
  38.     virtual AbstractProductA *createProductA() = 0;
  39.     virtual AbstractProductB *createProductB() = 0;
  40. };

  41. struct Factory1 : public AbstractFactory {
  42. public:
  43.     AbstractProductA *createProductA() {
  44.         return new ProductA_1();
  45.     }
  46.     AbstractProductB *createProductB() {
  47.         return new ProductB_1();
  48.     }
  49. };

  50. struct Factory2 : public AbstractFactory {
  51. public:
  52.     AbstractProductA *createProductA() {
  53.         return new ProductA_2();
  54.     }
  55.     AbstractProductB *createProductB() {
  56.         return new ProductB_2();
  57.     }
  58. };


  59. int main(int argc, char **argv)
  60. {
  61.     AbstractFactory *factory1 = new Factory1();
  62.     AbstractProductA *pA = factory1->createProductA();
  63.     AbstractProductB *pB = factory1->createProductB();
  64.     pA->operationA();
  65.     pB->operationB();
  66.     delete pA;
  67.     delete pB;
  68.     delete factory1;

  69.     AbstractFactory *factory2 = new Factory2();
  70.     pA = factory2->createProductA();
  71.     pB = factory2->createProductB();
  72.     pA->operationA();
  73.     pB->operationB();
  74.     delete pA;
  75.     delete pB;
  76.     delete factory2;

  77.     return 0;
  78. }

阅读(603) | 评论(0) | 转发(0) |
0

上一篇:工厂方法模式

下一篇:简单工厂模式

给主人留下些什么吧!~~