标签:style blog http color get 使用
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式结构图:
Builder是为创建一个Product对象的各个部件指定的抽象接口;ConcreteBuilder是具体建造者,实现Builder接口,构建和装配各个部件;Product就是产品角色;Director是构建使用Builder接口的对象。
建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。它的好处就是使得构造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
建造者模式基本代码:
#include <iostream> #include <vector> using namespace std; //Product类——产品类,有多个部件组成 class Product { private: vector<string> parts; public: void Add(string part) { parts.push_back(part); } void Show() { cout << endl << "产品创建---" << endl; vector<string>::iterator iter=parts.begin(); for(;iter!=parts.end();iter++) { cout << *iter << endl; } } }; //Builder类——抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult class Builder { public: virtual void BuilderPartA()=0; virtual void BuilderPartB()=0; virtual Product *GetResult()=0; }; //ConcreteBuilder1类——具体建造者类 class ConcreteBuilder1:public Builder { private: Product *product = new Product(); public: void BuilderPartA() { product->Add("部件A"); } void BuilderPartB() { product->Add("部件B"); } Product *GetResult() { return product; } }; //ConcreteBuilder2类——具体建造者类 class ConcreteBuilder2:public Builder { private: Product *product = new Product(); public: void BuilderPartA() { product->Add("部件X"); } void BuilderPartB() { product->Add("部件Y"); } Product *GetResult() { return product; } }; //Director类——指挥者类 class Director { public: void Construct(Builder *builder)//用来指挥构建过程 { builder->BuilderPartA(); builder->BuilderPartB(); } }; int main() { Director *director=new Director(); Builder *b1 = new ConcreteBuilder1(); Builder *b2 = new ConcreteBuilder2(); director->Construct(b1); Product *p1 = b1->GetResult(); p1->Show(); director->Construct(b2); Product *p2 = b2->GetResult(); p2->Show(); return 0; }
总之,建造者模式是在当前创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。
标签:style blog http color get 使用
原文地址:http://www.cnblogs.com/awy-blog/p/3814802.html