建造者模式

来源:互联网 发布:p2p网络管理 编辑:程序博客网 时间:2024/06/05 23:59

1、概念

                 Bulider模式也叫建造者模式或者生成器模式。Bulider是一种对象创建型模式之一,用来隐藏符合对象的创建过程,它把复合对象的创建过程加以抽象  ,通过子类继承和重载的方式,动态的创建具有复合属性的对象。

2、角色和职责



                  Bulider:为创建产品各个部分,统一抽象接口。

                  Connection:具体的创建产品的各个部分,部分A,部分B,部分C

                  Director:构造一个使用Bulider接口的对象

                   Product:表示被构造的负责对象

3、适用情况:

                       一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离。

4、实现代码:

  
#include<iostream>#include<string>using namespace std;class House{public:void setWall(string wall){m_wall = wall;}void setFloor(string floor){m_floor = floor;}void setWindow(string window){m_window = window;}string GetWall(){cout << m_wall << endl;return m_wall;}string GetFloor(){cout << m_floor << endl;return m_floor;}string GetWindow(){cout << m_window << endl;return m_window;}private:string m_wall;string m_floor;string m_window;};class Bulider{public:virtual void bulidWall() = 0;virtual void bulidFloor() = 0;virtual void bulidWindow() = 0;virtual House* GetHouse() =0;};// 公寓工程队class FlatBulider:public Bulider{public:FlatBulider(){m_house = new House;}virtual void bulidWall(){m_house->setWall("flat wall");}virtual void bulidFloor(){m_house->setFloor("flat floor");}virtual void bulidWindow(){m_house->setWindow("flat window");}virtual House* GetHouse(){return m_house;}private:House  *m_house;};// 别墅工程队class VilaBulider :public Bulider{public:VilaBulider(){m_house = new House;}virtual void bulidWall(){m_house->setWall("vila wall");}virtual void bulidFloor(){m_house->setFloor("vila floor");}virtual void bulidWindow(){m_house->setWindow("vila window");}virtual House* GetHouse(){return m_house;}private:House  *m_house;};// 设计师(指挥者) 负责建造逻辑// 建筑队  干具体的话class Director{public:Director(Bulider* bulid){m_bulid = bulid;}void Construct(){m_bulid->bulidWall();m_bulid->bulidFloor();m_bulid->bulidWindow();}private:Bulider* m_bulid;};int main(void){House *house = NULL;Bulider *bulider = NULL;Director *director = NULL;VilaBulider *vilaBulider = NULL;// 请一个建造别墅的工程队bulider= new VilaBulider;// 设计者 指挥 工程队 干活director= new Director(bulider);director->Construct();house = bulider->GetHouse();house->GetWall();house->GetFloor();house->GetWindow();delete house;delete director;delete bulider;// 请一个公寓工程队bulider = new FlatBulider;director = new Director(bulider);director->Construct();house = bulider->GetHouse();house->GetWall();house->GetFloor();house->GetWindow();delete house;delete director;delete bulider;return 0;}