设计模式之建造者模式

建造者模式(Builder Pattern)

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

 

常用场景

1. 在项目中创建过程复杂 
2. 会被重复使用来创建不同的对象。 

 

优点

1.隔离了构建的步骤和具体的实现,为产品的具体实现提供了灵活度。

2.封装和抽象了每个步骤的实现,实现了依赖倒转原则。

3.封装了具体的步骤,减少了代码的冗余。

 

缺点

要求构建产品的步骤(算法)是不能剧烈变化的,最好是不变的,这样就影响了灵活度。

 

C++实现

例子——建造电脑,一共需建造4个部分,主机、显示器、鼠标、键盘。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造电脑就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。下面给出建造者模式的UML图。
        

       设计模式之建造者模式

// 建造者基类
class Builder  
{
public:
    virtual void BuildHost() {}
    virtual void BuildDisplay() {}
    virtual void BuildKeyBoard(){}
    virtual void BuildMouse() {}
};

// Mac建造
class MacBuilder : public Builder
{
public:
    void BuildHost() { cout<<"build Mac Host"<<endl; }
    void BuildDisplay() { cout<<"build Mac Display"<<endl; }
    void BuildKeyBoard() { cout<<"build Mac KeyBoard"<<endl; }
    void BuildMouse() { cout<<"build Mac Mouse"<<endl; }
};

// Dell建造
class DellBuilder : public Builder
{
public:
    void BuildHost() { cout<<"build Dell Host"<<endl; }
    void BuildDisplay() { cout<<"build Dell Display"<<endl; }
    void BuildKeyBoard() { cout<<"build Dell KeyBoard"<<endl; }
    void BuildMouse() { cout<<"build Dell Mouse"<<endl; }
};

// 构造的指挥官
class Director  
{
private:
    Builder *m_pBuilder;
public:
    Director(Builder *builder) { m_pBuilder = builder; }
    
    void Build(){
        m_pBuilder->BuildHost();
        m_pBuilder->BuildDisplay();
        m_pBuilder->BuildKeyBoard();
        m_pBuilder->BuildMouse();
    }
};

int main(void)
{
    DellBuilder mac;
    Director director1(&mac);
    director1.Build();

    cout<<endl;

    DellBuilder dell;
    Director director2(&dell);
    director2.Build();

    return 0;
}

 

设计模式之建造者模式