设计模式--建造者模式

**将对象的构建和对象的表示分离开来
优势:对于使用者来说只需要选择不同类型的产品按照指定的框架就可以得到产品**
#include<iostream>
#include <string>

using namespace std;

//想要构建的产品的各个零件组成类
class house
{
public:
	void setDoor(const string &door)
	{
		_door = door;
		cout << door << endl;
	}
	void setfloor(const string &floor)
	{
		_floor = floor;
		cout << floor << endl;
	}
	void setwindow(const string &window)
	{
		_window = window;
		cout << window << endl;
	}
	string getDoor()
	{
		return _door;
	}
	string getFloor()
	{
		return _floor;
	}
	string getWindow()
	{
		return _window;
	}
private:
	string _door;
	string _floor;
	string _window;
};
//建造者(工程队)抽象类
class Builder
{
public:
	virtual void buildDoor() = 0;
	virtual void buildFloor() = 0;
	virtual void buildWindow() = 0;
	virtual house *getHouse() = 0;
};
//A工程队
class A_Builder : public Builder
{
public:
	A_Builder()
	{
		_house = new house;
	}
	void buildDoor()
	{
		_house->setDoor("A Door");
	}
	void buildFloor()
	{
		_house->setfloor("A Floor");
	}
	void buildWindow()
	{
		_house->setwindow("A Windows");
	}
	house *getHouse()
	{
		return _house;
	}
private:
	house *_house;
};
//B工程队
class B_Builder : public Builder
{
public:
	B_Builder()
	{
		_house = new house;
	}
	void buildDoor()
	{
		_house->setDoor("B Door");
	}
	void buildFloor()
	{
		_house->setfloor("B Floor");
	}
	void buildWindow()
	{
		_house->setwindow("B Windows");
	}
	house *getHouse()
	{
		return _house;
	}
private:
	house *_house;
};
//指挥者
class direct
{
public:
	//指挥者选择工程队
	direct(Builder *builder)
	{
		this->_builder = builder;
	}
	void DIYHouse()
	{
		_builder->buildDoor();
		_builder->buildFloor();
		_builder->buildWindow();
	}
private:
	Builder *_builder;
};


int main()
{
	house *myHouse = nullptr;
	Builder *builder = nullptr;
	direct *myDirect = nullptr;
	//建造一个A类型的房子
	**builder = new A_Builder;**
	myDirect = new direct(builder);
	myDirect->DIYHouse();

	myHouse = builder->getHouse();
	myHouse->getDoor();
	myHouse->getFloor();
	myHouse->getWindow();
	delete myDirect;
	delete builder;
	delete myHouse;
	//建造一个B类型的房子
	**builder = new B_Builder;**
	myDirect = new direct(builder);
	myDirect->DIYHouse();

	myHouse = builder->getHouse();
	myHouse->getDoor();
	myHouse->getFloor();
	myHouse->getWindow();
	delete myDirect;
	delete builder;
	delete myHouse;

	return 0;
}

建议在使用建造者模式的时候,将产品类抽象出来一层,设计者类同样抽象出来一层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值