博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++设计模式创建型工厂模式
阅读量:5886 次
发布时间:2019-06-19

本文共 1498 字,大约阅读时间需要 4 分钟。

工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符合开闭原则和依赖倒置原则
需要新加功能的时候不需要对原有代码进行修改。
抽象类human和抽象类factory就是调用接口,而实际的生产过程通过factory的子类(如boyfactory)来new
一个具体的human(如:boy)子类然后返回一个human父类的指针完成,如下图:
具体的代码如下:

点击(此处)折叠或打开

  1. #include<iostream>
  2. using namespace std;
  3. //工厂模式新增功能并不会修改原有代码符合开闭原则
  4. //使用多态实现
  5. //纯虚拟接口
  6. class human
  7. {
  8.   public:
  9.     virtual void getman(void) = 0;
  10.     virtual ~human()
  11.     {
  12.         //cout<<"4:"<<endl;
  13.     }
  14. };
  15. class factory
  16. {
  17. public:
  18.     virtual human* greman(void) = 0;
  19.     virtual ~factory()
  20.     {
  21.        // cout<<"3:"<<endl;
  22.     }
  23. };
  24. /////boy
  25. class boy:public human
  26. {
  27. public:
  28.     virtual void getman(void)
  29.     {
  30.         cout<<"I'M BOY!"<<endl;
  31.     }
  32.      virtual ~boy()
  33.     {
  34.       // cout<<"2:"<<endl;
  35.     }
  36. };
  37. class boyfactory:public factory
  38. {
  39. private:
  40.     boy* p;
  41. public:
  42.     virtual human* greman(void) //负责生产boy言外之意就是调用一个new来new出内存空间
  43.     {
  44.         p = new boy;
  45.         return p;
  46.     }
  47.     virtual ~boyfactory()
  48.     {
  49.        // cout<<"1:"<<endl;
  50.         delete p;
  51.     }
  52. };
  53. //后来新建的woman工厂和woman定义
  54. //////////////woman
  55. class woman:public human
  56. {
  57. public:
  58.     virtual void getman(void)
  59.     {
  60.         cout<<"I'M woman!"<<endl;
  61.     }
  62.      virtual ~woman()
  63.     {
  64.      // cout<<"5:"<<endl;
  65.     }
  66. };
  67. class womanfactory:public factory
  68. {
  69. private:
  70.     woman* p;
  71. public:
  72.     virtual human* greman(void) //负责生产woman言外之意就是调用一个new来new出内存空间
  73.     {
  74.         p = new woman;
  75.         return p;
  76.     }
  77.     virtual ~womanfactory()
  78.     {
  79.         //cout<<"6:"<<endl;
  80.         delete p;
  81.     }
  82. };
  83. ///////////////////////
  84. int main(void)
  85. {
  86.     //生产boy
  87.     factory* fa1= new boyfactory;
  88.     human* hm1 = NULL;
  89.     hm1 = fa1->greman();
  90.     hm1->getman();
  91.     delete fa1;
  92.     //生产woman
  93.     factory* fa2= new womanfactory;
  94.     human* hm2 = NULL;
  95.     hm2 = fa2->greman();
  96.     hm2->getman();
  97.     delete fa2;
  98.     cout<<"hello!"<<endl;
  99. }

转载地址:http://ovmix.baihongyu.com/

你可能感兴趣的文章
TCP/IP详解学习笔记(8)-DNS域名系统
查看>>
通过维基API实现维基百科查询功能
查看>>
bootstrap 2
查看>>
Annotation研究的一些学习资料
查看>>
webpack资料
查看>>
DotNet加密方式解析--散列加密
查看>>
OpenSSL使用2(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12概念说明)(转)
查看>>
【前端】:HTML
查看>>
SSM框架——使用MyBatis Generator自动创建代码
查看>>
java数据库操作:JDBC的操作
查看>>
基于OpenCV的形态学开源库 V0.2
查看>>
在ubuntu下安装和配置vsftpd
查看>>
c#中结构体和类的比较
查看>>
Linux磁盘配额
查看>>
JQuery UI的拖拽功能
查看>>
数据驱动销售——个性化推荐引擎
查看>>
C语言标准库函数qsort那点小事
查看>>
HL7 CDA高级培训
查看>>
Android 调用照相机拍照
查看>>
linux的C获取shell执行返回的结果
查看>>