zoukankan      html  css  js  c++  java
  • 设计模式-1.6建造者模式(生成器模式)

    建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程创建不同的表示。

    与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

    对于客户来说,只需知道导向者就可以了,通过导向者,客户就能构造复杂的对象,而不需要知道具体的构造过程。下面给出小人例子的代码实现。

     1 class Builder  
     2 {
     3 public:
     4     virtual void BuildHead() {}
     5     virtual void BuildBody() {}
     6     virtual void BuildLeftArm(){}
     7     virtual void BuildRightArm() {}
     8     virtual void BuildLeftLeg() {}
     9     virtual void BuildRightLeg() {}
    10 };
    11 //构造瘦人
    12 class ThinBuilder : public Builder
    13 {
    14 public:
    15     void BuildHead() { cout<<"build thin body"<<endl; }
    16     void BuildBody() { cout<<"build thin head"<<endl; }
    17     void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
    18     void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
    19     void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
    20     void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
    21 };
    22 //构造胖人
    23 class FatBuilder : public Builder
    24 {
    25 public:
    26     void BuildHead() { cout<<"build fat body"<<endl; }
    27     void BuildBody() { cout<<"build fat head"<<endl; }
    28     void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
    29     void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
    30     void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
    31     void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
    32 };
    33 //构造的指挥官
    34 class Director  
    35 {
    36 private:
    37     Builder *m_pBuilder;
    38 public:
    39     Director(Builder *builder) { m_pBuilder = builder; }
    40     void Create(){
    41         m_pBuilder->BuildHead();
    42         m_pBuilder->BuildBody();
    43         m_pBuilder->BuildLeftArm();
    44         m_pBuilder->BuildRightArm();
    45         m_pBuilder->BuildLeftLeg();
    46         m_pBuilder->BuildRightLeg();
    47     }
    48 };

    客户端:

    1 int main()
    2 {
    3     FatBuilder thin;
    4     Director director(&thin);
    5     director.Create();
    6     return 0;
    7 }
  • 相关阅读:
    我在华为做敏捷测试的那些流程
    精简测试用例编写
    五步定位性能瓶颈
    敏捷软件测试--初见
    并发用户数与TPS之间的关系
    关于CSS样式的那些事_导航条菜单讲解
    关于字符串的一些简单编码题
    设置div控件居中的方法
    sqlplus登录Oracle时ORA-01017: invalid username/password; logon denied的错误
    java中的foreach输出数组中的元素
  • 原文地址:https://www.cnblogs.com/ZhouYong-Travel/p/4009020.html
Copyright © 2011-2022 走看看