建造者模式-- 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();   //展示对象(产品)
}

  

posted @ 2017-09-08 15:08  宁静淡泊  阅读(150)  评论(0编辑  收藏  举报