设计模式之建造者模式(Builder)

建造者模式:

优点:

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

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

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

缺点:

1.要求构建的产品不能剧烈变化


代码示例:

Builer.h

#ifndef BULIDER_H
#define BULIDER_H

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();
    void buildBody();
    void buildLeftArm();
    void buildRightArm();
    void buildLeftLeg();
    void buildRightLeg();
};

class FatBuilder : public Builder
{
public:
    void buildHead();
    void buildBody();
    void buildLeftArm();
    void buildRightArm();
    void buildLeftLeg();
    void buildRightLeg();
};



class Director
{
public:
    Director(Builder *builder);
    void setBuilder(Builder *builder);
    void creadte();
private:
    Builder *m_builder;
};


#endif // BULIDER_H


Builder.cpp
#include "bulider.h"

#include <iostream>

void ThinBuilder::buildHead()
{
    std::cout << "build thin Head" << std::endl;
}

void ThinBuilder::buildBody()
{
    std::cout << "build thin Body" << std::endl;
}

void ThinBuilder::buildLeftArm()
{
    std::cout << "build thin LeftArm" << std::endl;
}

void ThinBuilder::buildRightArm()
{
    std::cout << "build thin RightArm" << std::endl;
}

void ThinBuilder::buildLeftLeg()
{
    std::cout << "build thin LeftLeg" << std::endl;
}

void ThinBuilder::buildRightLeg()
{
    std::cout << "build thin RightLeg" << std::endl;
}


void FatBuilder::buildHead()
{
    std::cout << "build fat Head" << std::endl;
}

void FatBuilder::buildBody()
{
    std::cout << "build fat Body" << std::endl;
}

void FatBuilder::buildLeftArm()
{
    std::cout << "build fat LeftArm" << std::endl;
}

void FatBuilder::buildRightArm()
{
    std::cout << "build fat RightArm" << std::endl;
}

void FatBuilder::buildLeftLeg()
{
    std::cout << "build fat LeftLeg" << std::endl;
}

void FatBuilder::buildRightLeg()
{
    std::cout << "build fat RightLeg" << std::endl;
}


Director::Director(Builder *builder)
    :m_builder(builder)
{
}

void Director::setBuilder(Builder *builder)
{
    m_builder = builder;
}

void Director::creadte()
{
    m_builder->buildHead();
    m_builder->buildBody();
    m_builder->buildLeftArm();
    m_builder->buildRightArm();
    m_builder->buildLeftLeg();
    m_builder->buildRightLeg();
}

main.cpp

#include <iostream>
#include "bulider.h"

int main()
{
    FatBuilder fatBuilder;
    Director director(&fatBuilder);
    director.creadte();

    std::cout << std::endl;

    ThinBuilder thisBuilder;
    director.setBuilder(&thisBuilder);
    director.creadte();

    return 0;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值