4.c++模式设计-建造者模式

代码非原创,如有侵权,请联系删除。仅做参考理解使用.

/*******************************************************************************
 * 建造者模式.
 * 时间:2020/5/7
 * 作者:xhome
 ******************************************************************************/

#include <iostream>

using namespace std;

class House {

public:

    void setFloor(const string &mFloor) {
        m_floor = mFloor;
    }

    void setWall(const string &mWall) {
        m_wall = mWall;
    }

    void setDoor(const string &mDoor) {
        m_door = mDoor;
    }

    const string &getFloor() const {
        return m_floor;
    }

    const string &getWall() const {
        return m_wall;
    }

    const string &getDoor() const {
        return m_door;
    }

private:
    string m_floor;
    string m_wall;
    string m_door;

};

//建造者类
class Builder {
public:
    virtual void makeFloor()=0;
    virtual void makeWall()=0;
    virtual void makeDoor()=0;
    virtual House * getHouse()=0;
};

//造公寓的类
class FlatBuilder: public Builder {
public:
    FlatBuilder()
    {
        pHouse = new House;
    }

    virtual void makeFloor()
    {
        pHouse->setFloor("flat floor");
    }

    virtual void makeWall()
    {
        pHouse->setWall("flat wall");
    }
    virtual void makeDoor()
    {
        pHouse->setDoor("flat door");
    }

    virtual House * getHouse()
    {
        return pHouse;
    }

private:
    House * pHouse;
};


//造别墅的类
class VillaBuild: public Builder {
public:
    VillaBuild()
    {
        pHouse = new House;
    }

    virtual void makeFloor()
    {
        pHouse->setFloor("villa floor");
    }

    virtual void makeWall()
    {
        pHouse->setWall("villa wall");
    }
    virtual void makeDoor()
    {
        pHouse->setDoor("villa door");
    }
    virtual House * getHouse()
    {
        return pHouse;
    }


private:
    House * pHouse;
};

//设计师,负责设计过程.
class Director
{
public:
    Director(Builder * build)
    {
        m_build = build;
    }

    void Construct()
    {
        m_build->makeWall();
        m_build->makeFloor();
        m_build->makeDoor();
    }

private:
    Builder * m_build;
};

int main() {

    House * house;
    Builder * builder;
    Director * director;

    //别墅工程队
    builder = new VillaBuild;
    //1.创建设计师
    director = new Director(builder);
    director->Construct();
    house = builder->getHouse();

   cout <<" " << house->getWall() << " ,  "<< house->getDoor()<< " , "<< house->getFloor() << endl;

   delete builder;
   delete director;
   delete house;

   //建造公寓工程队
    builder = new FlatBuilder;
    //1.创建设计师
    director = new Director(builder);
    director->Construct();
    house = builder->getHouse();

    cout <<" " << house->getWall() << " ,  "<< house->getDoor()<< " , "<< house->getFloor() << endl;
    delete builder;
    delete director;
    delete house;

    //也可以自己造房子,这样适合小作坊,不适合流水线.
//    house = new House;


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值