建造者模式

来源:互联网 发布:做软件怎么做 编辑:程序博客网 时间:2024/05/06 23:01

建造者模式(Builder):建一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临复杂的变化。

都将建造者模式与装饰模式比较,一个是过程固定内容不同的建造,一个是动态的装饰。这两个模式放在一起比较,是因为它们两个明显的不同,一个过程固定,一个动态变化。

个人觉得还有一个模式可以比较,那就是模版模式,仔细对比你会发现,将建造者模式的Director去掉的话,就是一个模板模式。

建造者模式类关系图:


c++实现代码:

#include<iostream>#include<string>#include<vector>using namespace std;class Product{public:Product(){}void add(string part);void show();private:vector<string> parts;};void Product::add(string part){parts.push_back(part);}void Product::show(){for (vector<string>::const_iterator iter = parts.begin(); iter != parts.end(); iter++)cout << *iter << "  ";cout << endl;}class Builder{public:virtual void buildPartA() = 0;virtual void buildPartB() = 0;virtual Product getResult() = 0;};class BuilderA : public Builder{public:BuilderA(){}void buildPartA();void buildPartB();Product getResult();private:Product product;};void BuilderA::buildPartA(){product.add("PartA");}void BuilderA::buildPartB(){product.add("PartB");}Product BuilderA::getResult(){return product;}class BuilderB : public Builder{public:BuilderB(){}void buildPartA();void buildPartB();Product getResult();private:Product product;};void BuilderB::buildPartA(){product.add("PartX");}void BuilderB::buildPartB(){product.add("PartY");} Product BuilderB::getResult(){return product;}class Director{public:void Construct(Builder *builder){builder->buildPartA();builder->buildPartB();}};int main(int argc, char **argv){ Director director;BuilderA *b1 = new BuilderA();BuilderB *b2 = new BuilderB();director.Construct(b1);Product p1 = b1->getResult();p1.show();director.Construct(b2);Product p2 = b2->getResult();p2.show();system("pause");return 0;}



参考:《大话设计模式》


原创粉丝点击