#include <iostream>#include <string>using namespace std;// 建造者模式,就是通过虚工程对基类,实现// 通过指挥者,指挥不同的建筑队建设不同的房子class House{public:void setDoor(string door){this->m_door = door;}void setWall(string wall){this->m_wall = wall;}void setWindow(string window){this->m_window = window;}string getDoor(void){cout << m_door << endl;return m_door;}string getWall(void){cout << m_wall << endl;return m_wall;}string getWindow(void){cout << m_window << endl;;return m_window;}private:string m_door;string m_wall;string m_window;};class Builder{public:virtual void BuildWall(void) = 0;virtual void BuildDoor(void) = 0;virtual void BuildWindow(void) = 0;virtual House* GetHouse(void) = 0;public:virtual ~Builder(void){}};//公寓建筑工程队class FlatBuilder : public Builder{public:FlatBuilder(){m_house = new House;}virtual void BuildWall(void){m_house->setWall("flat wall");}virtual void BuildDoor(void){m_house->setDoor("flat door");}virtual void BuildWindow(void){m_house->setWindow("flat window");}virtual House* GetHouse(void){return m_house;}private:House *m_house;};// 别墅工程队class VillaBuilder : public Builder{public:VillaBuilder(void){m_house = new House;}virtual void BuildWall(void){m_house->setWall("villa wall");}virtual void BuildDoor(void){m_house->setDoor("villa door");}virtual void BuildWindow(void){m_house->setWindow("villa window");}virtual House* GetHouse(void){return m_house;}private:House *m_house;};// 设计师 指挥者,负责建造的逻辑// 建筑队,干具体的活class Director{public:Director(Builder *builder){m_build = builder;}void Construct(void){m_build->BuildWall();m_build->BuildWindow();m_build->BuildDoor();}private:Builder * m_build;};int main(int argc, char const *argv[]){House *house = NULL;Builder *builder = NULL;Director *director = NULL;cout << "villa build" << endl;// 请一个建造别墅的工程队,建造一个别墅builder = new VillaBuilder;// 设计师 指挥工程队进行建造director = new Director(builder);// 指挥干活director->Construct();// 建好 交工house = builder->GetHouse();// 客户验房house->getWindow();house->getDoor();house->getWall();delete house;delete builder;cout << "flat build" << endl;builder = new FlatBuilder;director = new Director(builder);director->Construct();house = builder->GetHouse();house->getDoor();house->getWall();house->getWindow();delete house;delete builder;delete director;cout << "builder pattern." << endl;return 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。