建造者模式

介绍

例如建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下(传入参数)一步一步构造出不同的产品(但是内部建造顺序都是稳定的)。当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建, 由于在每一步的构造过程中
可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。这就是建造者模式。

实现

/*
纯虚函数,定义接口
*/
class Builder
{
public:
    virtual void BuildHead() = 0;
    virtual void BuildBody() = 0;
    virtual void BuildLeftArm()= 0;
    virtual void BuildRightArm() = 0;
    virtual void BuildLeftLeg() = 0;
    virtual void BuildRightLeg() = 0;
};
/*
构造瘦人
*/
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; }
};

/*
 * 构造胖人,和瘦人步骤一样,但是内容不同,防止客户程序调用复杂或者过程丢失。直接
 * 新建一个director执行相同的构造过程。
*/
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(void){

    //Singleton *s1 = Singleton::GetInstance();
    //Singleton *s2 = Singleton::GetInstance();//静态可以直接获取,系统最后会自动调用析构函数
    ThinBuilder thinperson;//声明类
    FatBuilder fatperson;//声明类

    Director(&thinperson).Create();//利用多态将多个调用简化了到create中
    Director(&fatperson).Create();//将多个调用简化了

    return 0;
}

这里写图片描述
模式在于简化相同数量函数的调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时需要偏执狂

请我喝咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值