#ifndef __BUILDER_MODEL__ #define __BUILDER_MODEL__ #include <string> #include <vector> #include <iostream> using namespace std; class Product { private: vector<string> m_product; public: void add(string strtemp) { m_product.push_back(strtemp); } void show() { vector<string>::iterator iter = m_product.begin(); while (iter!=m_product.end()) { cout<<*iter<<endl; ++iter; } } }; class Builder { public: virtual void builderA() = 0; virtual void builderB() = 0; virtual Product* getResult() = 0; }; class ConcreteComponentA : public Builder { private: Product* m_product; public: ConcreteComponentA(){ m_product = new Product(); } void builderA(){ m_product->add("one"); } void builderB(){ m_product->add("two"); } Product* getResult(){ return m_product; } }; class ConcreteComponentB : public Builder { private: Product* m_product; public: ConcreteComponentB(){ m_product = new Product(); } void builderA(){ m_product->add("1"); } void builderB(){ m_product->add("2"); } Product* getResult(){ return m_product; } }; //指挥者 class Direct { public: void conrete(Builder* pBuilder) { pBuilder->builderA(); pBuilder->builderB(); } }; #endif //__BUILDER_MODEL__ //《客户端》 /* #include "BuilderModel.h" int _tmain(int argc, _TCHAR* argv[]) { Direct* direct = new Direct(); Builder* pb1 = new ConcreteComponentA(); Builder* pb2 = new ConcreteComponentB(); direct->conrete(pb1); Product* p1 = pb1->getResult(); p1->show(); direct->conrete(pb2); Product* p2 = pb2->getResult(); p2->show(); return 0; } */