如果一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离,使得同样的构建过程可以创建不同的表示,那么比较适合采用建造者模式。 Abuilder:具体的建造着类,创建该产品的各个部分,部分A、部分B、部分C director:构造一个使用builer接口的对象 product:表示被构造的复杂对象 一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离,使得同样的构建过程可以创建不同的表示 #include <QCoreApplication> #include <string> #include<iostream> using namespace std; class house{ public: void setDoor(string str){ m_door =str; cout<<str<<endl; } void setWindow(string str){ m_wall=str; cout<<str<<endl; } void setWall(string str){ m_window=str; cout<<str<<endl; } private: string m_door; string m_wall; string m_window; }; class builder{ public: virtual void buildWall() = 0; virtual void buildWindow() = 0; virtual void buildDoor() = 0; virtual house* getHouse() = 0; }; class director{ public: director(builder* pBuilder){ m_pBuilder = pBuilder; } void construct(){ m_pBuilder->buildWall(); m_pBuilder->buildDoor(); m_pBuilder->buildWindow(); } private: builder* m_pBuilder; }; //公寓工程队 class FaltBuilder: public builder{ public: FaltBuilder(){ m_pHouse = new house(); } void buildWall(){ m_pHouse->setWall("建造公寓墙"); } void buildWindow(){ m_pHouse->setWindow("建造公寓窗"); } void buildDoor() { m_pHouse->setDoor("建造公寓门"); } house* getHouse(){ return m_pHouse; } private: house* m_pHouse; }; //别墅工程队 class villaBuilder: public builder{ public: villaBuilder(){ m_pHouse = new house(); } void buildWall(){ m_pHouse->setWall("建造别墅墙"); } void buildWindow(){ m_pHouse->setWindow("建造别墅窗"); } void buildDoor() { m_pHouse->setDoor("建造别墅门"); } house* getHouse(){ cout<<"返回建造好的房子"<<endl; return m_pHouse; } private: house* m_pHouse; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); builder* pbuilder = NULL; //建造别墅 pbuilder = new villaBuilder(); //同样的方法建造平房 //pbuilder = new FaltBuilder(); director * pdirector = new director(pbuilder); //造房子 pdirector->construct(); //获得房子 pbuilder->getHouse(); return a.exec(); } 使用场景: |
|