• 设计模式——建造者模式/生成器模式(C++实现)


      1 #include <iostream>
      2 #include <string>
      3 
      4 using namespace std;
      5 
      6 class STProduct
      7 {
      8 public:
      9         void setA(string str)
     10         {
     11                 m_a = str;
     12         }
     13 
     14         void setB(string str)
     15         {
     16                 m_b = str;
     17         }
     18 
     19         void setC(string str)
     20         {
     21                 m_c = str;
     22         }
     23 
     24         void Show()
     25         {
     26                 cout<< "Product: "<< m_a<< "!	"<< m_b<< "!	"<< m_c<< endl;
     27         }
     28 
     29 private:
     30         string m_a;
     31         string m_b;
     32         string m_c;
     33 };
     34 
     35 class STBuilder
     36 {
     37 public:
     38         STBuilder()
     39         {
     40                 m_pstProduct = new STProduct();
     41         }
     42         virtual ~STBuilder()
     43         {
     44                 delete m_pstProduct;
     45         }
     46 
     47         virtual void BuildPartA() = 0;
     48         virtual void BuildPartB() = 0;
     49         virtual void BuildPartC() = 0;
     50 
     51         virtual STProduct* GetResult()
     52         {
     53                 return m_pstProduct;
     54         }
     55 
     56         STProduct* m_pstProduct;
     57 };
     58 
     59 class STConcreteBuilder: public STBuilder
     60 {
     61 public:
     62         virtual void BuildPartA()
     63         {
     64                 m_pstProduct->setA("A Style");
     65         }
     66 
     67         virtual void BuildPartB()
     68         {
     69                 m_pstProduct->setB("B Style");
     70         }
     71 
     72         virtual void BuildPartC()
     73         {
     74                 m_pstProduct->setC("C Style");
     75         }
     76 };
     77 
     78 class STDirector
     79 {
     80 public:
     81         ~STDirector()
     82         {
     83                 delete m_pstBuilder;
     84         }
     85 
     86         void SetBuilder(STBuilder* pstTmpBuilder)
     87         {
     88                 m_pstBuilder = pstTmpBuilder;
     89         }
     90 
     91         STProduct* Construct()
     92         {
     93                 m_pstBuilder->BuildPartA();
     94                 m_pstBuilder->BuildPartB();
     95                 m_pstBuilder->BuildPartC();
     96 
     97                 return m_pstBuilder->GetResult();
     98         }
     99 
    100         STBuilder* m_pstBuilder;
    101 };
    102 
    103 int main(int argc, char* argv[])
    104 {
    105         STBuilder* pstBuilder = new STConcreteBuilder();
    106 
    107         STDirector* pstDirector = new STDirector();
    108         pstDirector->SetBuilder(pstBuilder);
    109 
    110         STProduct* pstProduct = pstDirector->Construct();
    111         cout<< "Show.................."<< endl;
    112         pstProduct->Show();
    113 
    114         return 0;
    115 }
    116 //////////////////////////////////////
    117 [root@ ~/learn_code/design_pattern/10_builder]$ ./builder
    118 Show..................
    119 Product: A Style!       B Style!        C Style

    参考:http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/builder.html

  • 相关阅读:
    猜数字游戏,猜三次都不对,则结束游戏,猜一次就成功,结束游戏
    用return关键字实现1——100累加求和,返回总和并接收输出
    用return关键字实现求和操作
    return关键字的作用和接受实验
    数组各元素随机赋值、求和、求平均值、求最大值的各类测试(一维数组)
    日期下拉选择
    22--
    css 17课--
    css盒模型
    css学习
  • 原文地址:https://www.cnblogs.com/070412-zwc/p/6834417.html
Copyright © 2020-2023  润新知