建造者模式
其他二十三种设计模式
#include<iostream>
#include<list>
using namespace std;
class Product {
public:
void Add(string _parts) {
parts->push_back(_parts);
}
void Show() {
cout << "产品创建: ";
for (list<string>::iterator it = parts->begin(); it != parts->end(); it++) {
cout << (*it) << " ";
}
cout << endl;
}
private:
list<string>* parts = new list<string>;
};
class Builder {
public:
virtual void BuilderPart1() = 0;
virtual void BuilderPart2() = 0;
virtual Product* GetResult() = 0;
};
class ConcreteBulider1 :public Builder {
public:
virtual void BuilderPart1() {
product->Add("部件A");
}
virtual void BuilderPart2() {
product->Add("部件B");
}
virtual Product* GetResult() {
return product;
}
private:
Product* product = new Product;
};
class ConcreteBulider2 :public Builder {
public:
virtual void BuilderPart1() {
product->Add("部件X");
}
virtual void BuilderPart2() {
product->Add("部件Y");
}
virtual Product* GetResult() {
return product;
}
private:
Product* product = new Product;
};
class Director {
public:
void Construct(Builder* _builder) {
_builder->BuilderPart1();
_builder->BuilderPart2();
}
};
void test1() {
Director* diractor = new Director;
Builder* b1 = new ConcreteBulider1;
Builder* b2 = new ConcreteBulider2;
diractor->Construct(b1);
Product* p1 = b1->GetResult();
p1->Show();
diractor->Construct(b2);
Product* p2 = b2->GetResult();
p2->Show();
delete b2;
delete b1;
delete diractor;
}
int main() {
test1();
return 0;
}