建造者模式-- 5种创建型模式之一

 

 

# include <iostream>
# include <string>

using namespace std;

//具体的产品,创建产品需要两个步骤,1、获取名称;2、获取型号
class Product {
public:
	void getName(string name) {name_ = name;}	//获取名称
	void getType(string type) {type_ = type;}	//获取型号
	void show() {	//展示产品
		cout << "名称:" << name_ << "\t型号:" << type_ << endl;
	}
private:
	string name_;	//名称
	string type_;	//型号
};

//抽象建造者
class AbsBuilder {
public:
	virtual Product getProduct() = 0;	//获取一个产品
	virtual void scanName() = 0;	//输入名称
	virtual void scanType() = 0;	//输入型号
};

//具体建造者,具体建造者依赖产品,具体建造者中使用类Product类
class Builder : public AbsBuilder {
public:
	virtual Product getProduct() {
		return product_;
	};
	virtual void scanName() {
		string name;
		cout << "请输入产品名称:" ;
		cin >> name;
		product_.getName(name);
	}
	virtual void scanType() {
		string type;
		cout << "请输入产品型号:" ;
		cin >> type;
		product_.getType(type);
	}
private:
	Product product_;
};

//导演,导演聚合建造者,即建造者是导演的一部分。
//construct负责走建造流程。
class Director {
public:
	Director(AbsBuilder *abs_builder) 
		: abs_builder_(abs_builder) {}
	void construct() {
		abs_builder_->scanName();
		abs_builder_->scanType();
	}
private:
	AbsBuilder *abs_builder_;
};

int main()
{
	Builder b;    //建造者实例
	Director d(&b);     //导演实例,导演聚合建造者
	d.construct();        //导演走建造流程
	Product p = b.getProduct();       //建造者返回导演建造后的对象
	p.show();   //展示对象(产品)
}

  

转载于:https://www.cnblogs.com/vrg0/p/7494767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值