C++設計模式建立型工廠模式

gaopengtttt發表於2017-04-11
工廠模式中使用了多型的原理,來將具體實現和介面進行有效的解耦合,符合開閉原則和依賴倒置原則
需要新加功能的時候不需要對原有程式碼進行修改。
抽象類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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章