1. 首页
  2. IT资讯

C++设计模式创建型工厂模式

工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符合开闭原则和依赖倒置原则
需要新加功能的时候不需要对原有代码进行修改。
抽象类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. }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2137029/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/183828.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code