根据 大话设计模式 第13章的建造者模式,用C++实现一遍
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//Product类——产品类,由多个部件组成
class Product
{
public:
void Add(string part)
{
v.push_back(part);
}
void Show()
{
for(int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}
}
protected:
vector<string> v;
};
//Builder类——抽象建造者类,确定产品由什么部件组成
//并声明一个得到产品建造后结果的方法GetResult
class Builder
{
public:
virtual void BuildPartA() = 0;
virtual void BuildPartB() = 0;
virtual Product* GetResult() = 0;
};
//建造具体的两个部件A、B
class ConcreateBuilder1:public Builder
{
public:
void BuildPartA()
{
product->Add("部件A");
}
void BuildPartB()
{
product->Add("部件B");
}
Product* GetResult()
{
return product;
}
protected:
Product* product = new Product;
};
//建造具体的两个部件X、Y
class ConcreateBuilder2:public Builder
{
public:
void BuildPartA()
{
product->Add("部件X");
}
void BuildPartB()
{
product->Add("部件Y");
}
Product* GetResult()
{
return product;
}
protected:
Product* product = new Product;
};
//Director类——指挥者类
class Director
{
public:
//void setBuilder(Builder *b)
//{
// builder = b;
//}
void Construct(Builder* builder)//进行组装
{
builder->BuildPartA();
builder->BuildPartB();
}
private:
Builder* builder;
};
int main(int argc, char *argv[])
{
Builder *b1 = new ConcreateBuilder1;//建造者1 建造A和B
Director *d = new Director;//指挥者
//d->setBuilder(b);
d->Construct(b1);//指挥者 指挥 建造者 建造
Product *p = b1->GetResult();//产品
p->Show();
cout << "****************" << endl;
Builder *b2 = new ConcreateBuilder2;//建造者2 建造X和Y
d->Construct(b2);
p = b2->GetResult();
p->Show();
return 0;
}