建造者模式就是将一个复杂对象的构造与它的表示分离,对于相同的建造过程,不同的建造者会得到不同的建造结果。
建造者的建造过程各个部分都是单独完成的。
建造者定义建造的步骤和接口。
具体建造者实现建造的步骤和接口,并完成产品的建造。
指导者决定使用哪一个建造者来建造,完成自己所需的产品。
建造者基类接口
#ifndef CBuildBaseH #define CBuildBaseH #include<iostream> #include"CProduct.h" using namespace std; class CBuildBase { public: virtual ~CBuildBase(){}; virtual void BuildDrink()=0; virtual void BuildFood()=0; virtual void BuildCocalate()=0; virtual CProduct GetProduct()=0; protected: CBuildBase(){}; CProduct m_CProduct; }; #endif
具体建造者A
#include"CBuildBase.h" class CConcreateA:public CBuildBase { public: CConcreateA(){}; ~CConcreateA(){}; void BuildDrink(){m_CProduct.m_sDrink = "可口可乐";} void BuildFood(){m_CProduct.m_sFood = "汉堡";} void BuildCocalate(){m_CProduct.m_sCocalate = "法式巧克力";} CProduct GetProduct(){return m_CProduct;}; private: };
具体建造者B
#include"CBuildBase.h" class CConcreateB:public CBuildBase { public: CConcreateB(){}; ~CConcreateB(){}; void BuildDrink(){m_CProduct.m_sDrink = "橙汁";} void BuildFood(){m_CProduct.m_sFood = "炒米饭";} void BuildCocalate(){m_CProduct.m_sCocalate = "意大利风味巧克力";} CProduct GetProduct(){return m_CProduct;}; private: };
指导者
#include"CBuildBase.h" class CDirecter { public: CDirecter(){}; ~CDirecter(){}; CProduct Construct(CBuildBase *pCBuildBase) { pCBuildBase->BuildDrink(); pCBuildBase->BuildFood(); pCBuildBase->BuildCocalate(); return pCBuildBase->GetProduct(); } };
产品
#ifndef CProductH #define CProductH #include<iostream> #include<string> using namespace std; class CProduct { public: CProduct(){}; ~CProduct(){}; void GetProduct() { cout<<"you select "<<m_sDrink<<" "<<m_sFood<<" "<<m_sCocalate<<endl; } void SetDrink(const string &sDrink) { m_sDrink = sDrink; } void SetFood(const string &sFood) { m_sFood = sFood; } void SetCocalate(const string &sCocalate) { m_sCocalate = sCocalate; } string m_sDrink; string m_sFood; string m_sCocalate; }; #endif
主函数
#include "CDirecter.h" #include "ContreadBuilderA.h" #include "ContreadBuilderB.h" int main() { CDirecter *pCDirecter = new CDirecter(); CConcreateA *pBuilderA = new CConcreateA(); CProduct tProduct; tProduct = pCDirecter->Construct(pBuilderA); tProduct.GetProduct(); CConcreateB *pBuilderB = new CConcreateB(); tProduct = pCDirecter->Construct(pBuilderB); tProduct.GetProduct(); char c= getchar(); c = getchar(); return 0; }
本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1388668
原文:http://2309998.blog.51cto.com/2299998/1388668