zoukankan      html  css  js  c++  java
  • 设计模式--建造者模式Builder(创建型)

    一、首先看建造者模式的UML图:

    二、再来看一个建造者模式的例子

    class Builder  
    {
    public:
        virtual void BuildHead() {}
        virtual void BuildBody() {}
        virtual void BuildLeftArm(){}
        virtual void BuildRightArm() {}
        virtual void BuildLeftLeg() {}
        virtual void BuildRightLeg() {}
    };
    //构造瘦人
    class ThinBuilder : public Builder
    {
    public:
        void BuildHead() { cout<<"build thin body"<<endl; }
        void BuildBody() { cout<<"build thin head"<<endl; }
        void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
        void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
    };
    //构造胖人
    class FatBuilder : public Builder
    {
    public:
        void BuildHead() { cout<<"build fat body"<<endl; }
        void BuildBody() { cout<<"build fat head"<<endl; }
        void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
        void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
        void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
        void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
    };
    //构造的指挥官
    class Director  
    {
    private:
        Builder *m_pBuilder;
    public:
        Director(Builder *builder) { m_pBuilder = builder; }
        void Create(){
            m_pBuilder->BuildHead();
            m_pBuilder->BuildBody();
            m_pBuilder->BuildLeftArm();
            m_pBuilder->BuildRightArm();
            m_pBuilder->BuildLeftLeg();
            m_pBuilder->BuildRightLeg();
        }
    };

    int main()
    {
    FatBuilder thin;
    Director director(&thin);
    director.Create();
    return 0;
    }

    三、建造者模式和工厂模式的联系

    联系前面的工厂模式,可以发现建造者模式只比工厂模式多了一个“导演类”的角色。如果把导演类看做客户端,就可以看做一个简单的工厂模式了。

    与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更为复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

    建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。

    参考:

    http://blog.csdn.net/hguisu/article/details/7518060

    http://blog.csdn.net/wuzhekai1985/article/details/6667467

  • 相关阅读:
    XML与JSON的对比
    WPF dataGrid下的ComboBox的绑定
    WPF 导出Excel(合并单元格)
    WPF x:key和x:name用法
    WPF Canvas
    WPF Visibility属性用法
    AxInterop.ShockwaveFlashObjects.dll 问题
    BadImageFormatException,未能加载正确的程序集XXX的解决办法
    inner join ,left join ,right join区别
    Mac系统下php.ini的位置
  • 原文地址:https://www.cnblogs.com/justkong/p/6228526.html
Copyright © 2011-2022 走看看