C++设计模式之建造者模式(2)
复制代码 代码如下: /* ** FileName : BuilderPattern ** Author : Jelly Young ** Date : 2013/11/23 ** Description : More information, please go to http://www.jb51.net */ #include iostream #includ
复制代码 代码如下:
/*
** FileName : BuilderPattern
** Author : Jelly Young
** Date : 2013/11/23
** Description : More information, please go to http://www.jb51.net
*/
#include <iostream>
#include <vector>
using namespace std;
class Builder;
// Product
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)
{
cout<<*item<<endl;
}
}
private:
std::vector<const char *> m_PartInfoVec;
};
// Builder
class Builder
{
public:
virtual void BuildPartA() {}
virtual void BuildPartB() {}
virtual Product *GetProduct() { return NULL; }
};
// ConcreteBuilder
class ConcreteBuilder : public Builder
{
public:
ConcreteBuilder() { m_Product = new Product(); }
void BuildPartA()
{
m_Product->AddPart("PartA completed");
}
void BuildPartB()
{
m_Product->AddPart("PartB completed");
}
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;
};
// main
int main()
{
Builder *builderObj = new ConcreteBuilder();
Director directorObj(builderObj);
directorObj.CreateProduct();
Product *productObj = builderObj->GetProduct();
if (productObj == NULL)
{
return 0;
}
productObj->ShowProduct();
delete builderObj;
builderObj = NULL;
}
通过比较上面的两个例子,可以很容易的把建造者模式的骨架抽象出来。
使用要点
- 上一篇:C++设计模式之原型模式
- 下一篇:C++中的RAII机制详解
精彩图集
精彩文章