一,建造者模式与抽象工程模式很相似,区别:抽象工厂模式侧重一系列的产品复杂的建造;而建造者模式侧重一步一步建造复杂的产品,最终返回产品。
二,UML图解
#include "stdafx.h"
#include <iostream>
#include <vector>
#include<string>
using namespace std;
class Product
{
public:
Product()
{
m_part = new vector<string>;
}
virtual ~Product()
{
if (m_part)
{
delete m_part;
}
}
void addPart(string part)
{
m_part->push_back(part);
}
void showPro()
{
vector<string>::iterator it = m_part->begin();
for(;it!=m_part->end();it++)
cout<<*it<<endl;
}
private:
vector<string> *m_part;
};
class Builder
{
public:
Builder(){}
virtual ~Builder(){}
virtual void BuildPartA(){}
virtual void BuildPartB(){}
virtual Product* getProduct() const
{
return NULL;
}
};
class ConcreteBuider1 : public Builder
{
public:
ConcreteBuider1(){}
virtual ~ConcreteBuider1(){}
virtual void BuildPartA()
{
m_product->addPart("ConcreteBuider1:BuildPartA");
}
virtual void BuildPartB()
{
m_product->addPart("ConcreteBuider1:BuildPartB");
}
virtual Product* getProduct() const
{
return m_product;
}
private :
Product * m_product;
};
class ConcreteBuider2: public Builder
{
public:
ConcreteBuider2(){}
virtual ~ConcreteBuider2(){}
virtual void BuildPartA()
{
m_product->addPart("ConcreteBuider2:BuildPartA");
}
virtual void BuildPartB()
{
m_product->addPart("ConcreteBuider2:BuildPartB");
}
virtual Product* getProduct() const
{
return m_product;
}
private :
Product * m_product;
};
class Director
{
public:
Director(){}
~Director(){}
void CreateProduct(Builder *build)
{
build->BuildPartA();
build->BuildPartB();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Builder *build1 =new ConcreteBuider1();
Director director;
director.CreateProduct(build1);
Product* product1=build1->getProduct();
product1->showPro();
Builder *build2 =new ConcreteBuider2();
director.CreateProduct(build2);
Product* product2=build2->getProduct();
product2->showPro();
return 0;
}
参考:http://blog.csdn.net/wallwind/article/details/8105093