Builder模式

Builder模式

 
一、意图:
    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
二、通俗解释:
    大学教育有四个学年,每个学年可作为教育的一个构建过程,每个人经过四年得到的结果不一样,因为在这四个阶段的构建中
引入了不同的参数(如个人的奋斗和机遇等)。
三、解决的问题:
    当我们要创建的对象很复杂时(由很多其他的对象组合而成),把复杂对象的创建过程和这个对象的表示分离开来。这样做的好处
是通过一步步的对复杂对象的构建,使得经过相同的步骤创建最后得到的对象的展示不一样(在每一步的构造过程中可以引入参数)。
四、C++示例:
/*说明:代码实现了一个造人的例子,一共需构造6个部分:头,身体,左右手,脚。与工厂模式不同,Builder模式是在导向者的
  控制下一步一步构造产品的。Builder模式可以更精细的控制构建过程,从而更精细的控制所得产品的内部结构。
*/
<pre name="code" class="cpp">#include <iostream>

using namespace std;

//构造人的抽象基类(接口)
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 fat;
    Director director(&fat);
    director.Create();
    return 0;
}

五、总结:
<span style="font-size:14px;">Builder模式和AbstractFactory模式功能上很相似,都是用来创建大的复杂的对象。区别是:Builder模式强调</span>
的是一步步创建对象,通过相同的创建过程可以获得不同的结果对象,一般Builder模式中对象不是直接返回的。而在
AbstractFactory模式中对象是直接返回,AbstractFactory模式强调的是为创建多个相互依赖的对象提供一个统一的接口。


 
 
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值