C++学习笔记(三十)建造者模式

建造者模式定义:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

建造者模式包括的角色:

(1)Builder:给出一个抽象接口或抽象类,以规范产品的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建,一般由子类具体实现。

(2)ConcreteBuilder:Builder接口的实现类,并返回组建好对象实例。

(3)Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

(4)Product:要创建的复杂对象,产品类。

 

建造者模式的使用场景:

(1)当产品有复杂的内部构造时(参数很多)。

(2)需要生产的产品的属性相互依赖,这些属性的赋值顺序比较重要时(因为在调用ConcreteBuilder的赋值方法时是有先后顺序的)。


#include <iostream>

#include <vector>
#include <string>
using namespace std;


// 房子
class Home
{
public:
void buildPart(string name)
{
parts.push_back(name);
}

void show()
{
for (unsigned int i = 0; i < parts.size(); i++)
cout << parts[i] << endl;
}
private:
vector<string>  parts;
};


// 抽象建造者 : 工程队
class Builder
{
public:
Builder()
{
home = new Home;
}


Home* getHome()
{
return home;
}


public:
virtual void BuildBase() = 0;    // 打地基
virtual void BuildWall() = 0;    // 砌墙
virtual void Buildwindow() = 0;  // 安窗户
virtual void BuildDoor() = 0;    // 装门

protected:
Home *home;
};


// 建造茅草房的工程队
class WoodBuilder:public Builder
{
public:
virtual void BuildBase()
{
home->buildPart("茅草房的地基");
}
virtual void BuildWall()
{
home->buildPart("茅草房的墙");
}
virtual void Buildwindow()
{
home->buildPart("茅草房的窗户");
}
virtual void BuildDoor()
{
home->buildPart("茅草房的门");
}
};

// 建造别墅的工程队
class VillaBuilder:public Builder
{
public:
virtual void BuildBase()
{
home->buildPart("别墅的地基");
}
virtual void BuildWall()
{
home->buildPart("别墅的墙");
}
virtual void Buildwindow()
{
home->buildPart("别墅的窗户");
}
virtual void BuildDoor()
{
home->buildPart("别墅的门");
}
};


// 指挥者, 指挥工程队造房子  ======>  各个部件的组装过程
class Director
{
public:
Director(Builder *b)
{
buider = b;
}

// 建造过程,   组装过程
void Concrete()
{
buider->BuildBase();
buider->BuildWall();
buider->Buildwindow();
buider->BuildDoor();
}
private:
Builder *buider;
};

int main()
{
// Builder *pb  = new VillaBuilder;  // 工程队
Builder *pb  = new WoodBuilder;  // 工程队
Director *pd = new Director(pb);  // 指挥者
pd->Concrete();  // 造房子的过程

// 拿房
Home *ph = pb->getHome();
ph->show();
    return 0;

}


总体而言 建造者模式 跟工厂模式相比, 多了一个控制类, 用来控制对象的创建. 同时建造者模式 是关注的创建的过程.为了减少中间创建对象代码  

建造者模式优缺点

建造者模式的优点:

(1)建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心,良好的封装性是建造者模式的优点之一。

(2)建造者类逻辑独立,易拓展。

 

建造者模式的缺点:

很明显产生了多余的Build对象以及Dirextor对象,消耗了内存。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值