建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式实现:
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;
};
客户端:
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;
}