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