外国的网站是什么网站,汉网可以建设网站不,学做网站的视频教学,网页传奇哪个好玩1. 意图 将一个复杂对象的构建与它的表示分离#xff0c;使得同样的构建过程可以创建不同的表示。
2. 四种角色 指挥(Director)、抽象生成器(Builder)、具体生成器(Concrete Builder)、产品(Product)
3. 优点 3.1 可以改变一个产品的内部表示(通过定义新的生成器)。 3.2 将构…1. 意图 将一个复杂对象的构建与它的表示分离使得同样的构建过程可以创建不同的表示。
2. 四种角色 指挥(Director)、抽象生成器(Builder)、具体生成器(Concrete Builder)、产品(Product)
3. 优点 3.1 可以改变一个产品的内部表示(通过定义新的生成器)。 3.2 将构造代码和表示代码分开。 3.3 可对构造过程进行更精细的控制。在Director的Construct函数。
4. 缺点 N/A
5. 相关模式 5.1 Builder着重于一步步构造一个复杂对象而抽象工厂着重于多个系列的产品对象。 Builder在最后一步返回产品而抽象工厂是立即返回产品的。 5.2 Composite通常是用Builder生成的。
6. 代码示意(C)
#pragma once
#include string
#include iostream
#include vectorusing namespace std;class Product
{
private:vectorstring m_parts;
public:void Add(string strtemp){m_parts.push_back(strtemp);}void Show(){vectorstring::iterator it m_parts.begin();while (it ! m_parts.end()){cout *it endl;it;}}
};
class Builder
{
public:virtual void BuildPartA() 0;virtual void BuildPartB() 0;virtual void BuildPartC() 0;virtual Product* GetResult() 0;
};
class ConcreteBuilder1 :public Builder
{
private:Product* m_pProduct;
public:ConcreteBuilder1(){m_pProduct new Product();}~ConcreteBuilder1(){delete m_pProduct;}virtual void BuildPartA(){m_pProduct-Add(A零件);}virtual void BuildPartB(){m_pProduct-Add(B零件);}virtual void BuildPartC(){m_pProduct-Add(C零件);}virtual Product* GetResult(){return m_pProduct;}
};
class ConcreteBuilder2 :public Builder
{
private:Product* m_pProduct;
public:ConcreteBuilder2(){m_pProduct new Product();}~ConcreteBuilder2(){delete m_pProduct;}virtual void BuildPartA(){m_pProduct-Add(不一样的A零件);}virtual void BuildPartB(){m_pProduct-Add(不一样的B零件);}virtual void BuildPartC(){m_pProduct-Add(不一样的C零件);}virtual Product* GetResult(){return m_pProduct;}
};class Director
{
private:Builder* m_pBuilder;
public:Director(Builder* pBuilder) {m_pBuilder pBuilder;}void Construct(){m_pBuilder-BuildPartA();m_pBuilder-BuildPartB();m_pBuilder-BuildPartC(); }
};
#include Builder.h
int main() {Builder* pBuilder new ConcreteBuilder1;Director* pDirector new Director(pBuilder);pDirector-Construct();pBuilder-GetResult()-Show();delete pDirector;delete pBuilder;return 0;
}
运行结果 6.1 更换生成器只需在main函数里用ConcreteBuilder2来替换ConcreteBuilder1即可(3.1)。
6.2 可以创建不同的Director来控制所需零件来组成不同产品(3.2)。
6.3 Director的Construct函数可以控制构造过程(3.3)。