C++学习经历(十四)建造者模式

建造者模式

将产品的内部表象和产品的生产过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造者模式使得产品内部表象可以独立的变化,客户不必知道产品内部实现的细节。建造者模式可以强制实行一种分步骤进行的建造过程。

例子:一个房子(House)有门(Door)和墙(Wall),建造者(Builder)在建造屋子的时候需要造门和墙,但是我们并不需要知道如何建造门和墙、我们只需要派遣建造者去造屋子就可以了,不同的建造者自己就会建造出不同的屋子。我们通过设计者(Designer)选择不同的建造者,直接造出屋子,并不需要知道具体的内部实现过程。


#include <iostream>

using namespace std;

class House
{
    private:
        string m_Wall;
        string m_Door;
    public:
        void set_wall(string w)
        {
            m_Wall = w;
        }
        void set_door(string d)
        {
            m_Door = d;
        }
        string get_wall()
        {
            return m_Wall;
        }
        string get_door()
        {
            return m_Door;
        }
};

class Builder
{
    protected:
        House *house;
    public:
        virtual void Constructor() = 0;
        virtual House *get_house() = 0;
        virtual void builder_wall(string w) = 0;
        virtual void builder_door(string d) = 0;
};

class CommonBuilder : public Builder
{
    public:
        CommonBuilder()
        {
            house = new House;
        }
        void Constructor()
        {
            builder_wall("COMMONWALL");
            builder_door("COMMOONDOOR");
        }
        House *get_house()
        {
            return house;
        }
    private:
        void builder_wall(string w)
        {
            house -> set_wall(w);
        }
        void builder_door(string d)
        {
            house -> set_door(d);
        }
};

class VillaBuilder : public Builder
{
    public:
        VillaBuilder()
        {
            house = new House;
        }
        void Constructor()
        {
            builder_wall("VILLAWALL");
            builder_door("VILLADOOR");
        }
        House *get_house()
        {
            return house;
        }
    private:
        void builder_wall(string w)
        {
            house -> set_wall(w);
        }
        void builder_door(string d)
        {
            house -> set_door(d);
        }
};

class Designer
{
    private:
        Builder *builder;
    public:
        void set_builder(Builder *b)
        {
            builder = b;
        }
        void Constructor()
        {
            builder -> Constructor();
        }
};

int main(int argc, char **argv)
{
    House *house = NULL;
    Builder *builder = NULL;
    Designer *designer = new Designer;
    builder = new CommonBuilder;

    designer -> set_builder(builder);
    designer -> Constructor();
    house = builder -> get_house();

    cout << house -> get_wall() << endl;
    cout << house -> get_door() << endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值