一,建造者模式与抽象工程模式很相似,区别:抽象工厂模式侧重一系列的产品复杂的建造;而建造者模式侧重一步一步建造复杂的产品,最终返回产品。
二,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