Builder pattern (Builder): Separates the construction of a complex object from its representation, so that the same construction process can create different representations.
Pattern implementation:
[code]class Builder; //产品 class Product{ public: void AddPart(const char *info){ m_PartInfoVec.push_back(info); } void ShowProduct(){ for(std::vector<const char *>::iterator item = m_PartInfoVec.begin(); item != m_PartInfoVec.end(); ++item){ std::cout << *item << std::endl; } } private: std::vector<const char *> m_PartInfoVec; }; //Builder建造者,统一抽象接口 class Builder{ public: virtual void BuildPartA(){} virtual void BuildPartB(){} virtual Product* GetProduct() { return NULL;} }; //具体的被创建对象方法 class ConcreteBuilder:public Builder{ public: ConcreteBuilder(){ m_Product = new Product(); } void BuildPartA(){ m_Product->AddPart("PartA completed"); } void BuildPartB(){ m_Product->AddPart("PartB q"); } Product* GetProduct(){ return m_Product; } private: Product *m_Product; }; //Director控制具体建造对象的创建 class Director{ public: Director(Builder *builder) { m_Builder = builder; } void CreateProduct(){ m_Builder->BuildPartA(); m_Builder->BuildPartB(); } private: Builder *m_Builder; };
Client:
[code]int main(){ Builder *builderObj = new ConcreteBuilder(); Director directorObj(builderObj); directorObj.CreateProduct(); Product *productObj = builderObj->GetProduct(); if(productObj == NULL) { return 0; } productObj->ShowProduct(); delete productObj; productObj = NULL; delete builderObj; builderObj = NULL; }
The above is the content of the builder pattern of C++ design pattern. For more related content, please pay attention to PHP Chinese Net (www.php.cn)!