#include<iostream>
#include<list>
using namespace std;
class Product{
public:
void add(string s){
l.push_back(s);
};
void show(){
list<string>::iterator iter = l.begin();
for(;iter != l.end();++iter){
cout<<*iter<<endl;
}
};
private:
list<string> l;
};
class Builder{
public:
virtual void buildPartA() = 0;
virtual void buildPartB() = 0;
virtual Product * get() = 0;
};
class ConcreteBuilderA : public Builder{
public:
ConcreteBuilderA(){p = new Product;};
void buildPartA(){
p->add("part A");
};
void buildPartB(){
p->add("part B");
};
Product * get(){return p;};
private:
Product * p;
};
class ConcreteBuilderB : public Builder{
public:
ConcreteBuilderB(){p = new Product;};
void buildPartA(){
p->add("part X");
};
void buildPartB(){
p->add("part Y");
};
Product * get(){return p;};
private:
Product * p;
};
class Director{
public:
Director(Builder * b):bb(b){};
void build(){
bb->buildPartA();
bb->buildPartB();
};
void construct(Builder * bbb){bb = bbb;};
Product * get(){return bb->get();};
private:
Builder * bb;
};
int main(){
Director * d = new Director(new ConcreteBuilderA);
d->build();
Product * p = d->get();
p->show();
d->construct(new ConcreteBuilderB);
d->build();
p = d->get();
p->show();
}
建造者模式c++实现
最新推荐文章于 2024-09-16 17:46:36 发布