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

前言

本文只是记录本人学习设计模式时记录的一些学习笔记,可能不全,但是可以做到一些提醒记忆的作用,如有侵权,联系删改,文章后会贴出学习时参考的链接。此前言适用于本人所写设计模式系列。

建造者

将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程。

结构
  1. Builder:为创建产品各个部分,统一抽象接口。
  2. Concrete Builder:具体的创建产品的各个部分,部分A, 部分B,部分C。
  3. Director:构造一个使用Builder接口的对象。
  4. Product:表示被构造的复杂对象。
  5. Concrete Builder:创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
示例
#include <iostream>
using namespace std;
class House
{
public:
    void setFloor(string floor)
    {
        this->m_floor = floor;
    }
    void setWall(string wall)
    {
        this->m_wall = wall;
    }
    void setDoor(string door)
    {
        this->m_door = door;
    }

    string getFloor()
    {
        return m_floor;
    }
    string setWall()
    {
        return  m_wall;
    }
    string setDoor()
    {
        return m_door;
    }
protected:
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 FlatBuildr : public Builder
{
public:
    FlatBuildr()
    {
        pHouse = new House;
    }
    virtual void makeFloor()
    {
        pHouse->setFloor("flat Door");
    }
    virtual void makeWall()
    {
        pHouse->setWall("flat Wall");
    }
    virtual void makeDoor()
    {
        pHouse->setDoor("flat Door");
    }
    virtual House *GetHouse()
    {
        return pHouse;
    }
private:
    House *pHouse;
};

//别墅
class VillaBuildr : public Builder
{
public:
    VillaBuildr()
    {
        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:
    void Construct(Builder *builder)
    {
        builder->makeFloor();
        builder->makeWall();
        builder->makeDoor();
    }
};

int main()
{
    //客户直接造房子
    House *pHose = new House;
    pHose->setDoor("门");
    pHose->setFloor("地板");
    pHose->setWall("墙");
    delete pHose;

    /* //工程队直接造房子
    Builder *builder = new FlatBuildr;
    builder->makeFloor();
    builder->makeWall();
    builder->makeDoor();
    */

    //指挥者(设计师)指挥 工程队 和 建房子
    Director *director = new Director;
    
    //建公寓
    Builder *builder = new FlatBuildr;
    director->Construct(builder); //设计师 指挥 工程队干活
    House *house = builder->GetHouse();
    cout << house->getFloor() << endl;
    delete house;
    delete builder;

    //建别墅
    builder = new VillaBuildr;
    director->Construct(builder); //设计师 指挥 工程队干活
    house = builder->GetHouse();
    cout << house->getFloor() << endl;
    delete house;
    delete builder;
    
    delete director;
    return 0;
}

参考:

【设计模式】C语言与C++开发基础_哔哩哔哩_bilibili
生成器模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值