建造者模式

建造者模式(Builder Pattern),旨在将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式结构
Builder 抽象建造者
ConcreteBuilder 具体建造者
Director指挥者
Product产品
优点:
建造者独立,易于扩展
便于控制细节风险
缺点:
产品必须有共同点,范围有限制
如果内部变化复杂,将会有很多的建造类
//基类, 拥有共同的方法
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 _tmain(int argc, _TCHAR* argv[])
{
    FatBuilder *fat= new FatBuilder();
    Director *director = new Director(fat);
    director->Create();  
    return 0;
}
原文地址:https://www.cnblogs.com/osbreak/p/10116851.html