建造者模式
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
本文介绍建造者模式代码框架,代码使用C++语言描述,代码存在的不足或问题有望各位指出。
建造者模式代码框架
//建造者模式
#include <iostream>
#include <list>
#include <vector>
#include <string>
using namespace std;
class Product
{
public:
void Add( string part)
{
parts.push_back(part);
}
void show()
{
cout << "产品 创建 ----" << endl;
for_each(parts.begin(),parts.end(),[](const string &s){cout << s << endl;});
cout << endl;
}
private:
vector<string> parts;
};
class Builder
{
public:
Builder(){}
virtual ~Builder(){}
virtual void buildPartA() =0;
virtual void buildPartB() =0;
virtual Product *getResult()=0;
};
class ConcreteBuilder1: public Builder
{
public:
ConcreteBuilder1()
{
product = new Product();
}
~ConcreteBuilder1()
{
delete product;
product = nullptr;
}
void buildPartA() override
{
product->Add("部件A");
}
void buildPartB() override
{
product->Add("部件B");
}
Product *getResult() override
{
return product;
}
private:
Product *product;
};
class ConcreteBuilder2: public Builder
{
public:
ConcreteBuilder2()
{
product = new Product();
}
~ConcreteBuilder2()
{
delete product;
product = nullptr;
}
void buildPartA() override
{
product->Add("部件A");
}
void buildPartB() override
{
product->Add("部件B");
}
Product *getResult() override
{
return product;
}
private:
Product *product;
};
class Director
{
public:
void construct( Builder *builder)
{
builder->buildPartA();
builder->buildPartB();
}
};
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();
delete director;
delete b1;
delete b2;
return 0;
}
建造者模式
1、主要是用于创建一些复杂的对象,这些对象内部构建间的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。
2、建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在定义一个具体的建造者就可以了。
3、建造者模式是在当创建复杂对象的算法应该独立与该对象的组成部分以及它们的装配方式时适用的模式。