您的位置:首页 > 编程语言 > C语言/C++

C++设计模式浅识建造者模式

2016-06-25 10:56 399 查看
建造者模式(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: