您的位置:首页 > 其它

设计模式之建造者模式

2009-09-06 18:35 351 查看
class Product

{

public:

void Add(string part)

{

parts.push_back(part);

}
void show()

{

cout<<"--- Product builder ---"<<endl;

// for(int i = 0; i< parts.size(); ++i)

// cout<<parts[i]<<endl;

for(vector<string>::iterator iter = parts.begin(); iter != parts.end(); ++iter)

cout<<*iter<<endl;

}
private:

vector<string> parts;

};
class Builder

{

public:

virtual void BuilderPartA()=0;

virtual void BuilderPartB()=0;

virtual Product * GetResult()=0;

};
class ConcreteBuilder1 : public Builder

{

public:

ConcreteBuilder1()

{

product = new Product;

}
void BuilderPartA()

{

product->Add("Part A");

}
void BuilderPartB()

{

product->Add("Part B");

}
Product * GetResult()

{

return product;

}
private:

Product *product;

};
class ConcreteBuilder2 : public Builder

{

public:

ConcreteBuilder2()

{

product = new Product;

}
void BuilderPartA()

{

product->Add("Part X");

}
void BuilderPartB()

{

product->Add("Part Y");

}
Product * GetResult()

{

return product;

}
private:

Product *product;

};
class Director

{

public:

void Construct(Builder *builder)

{

builder->BuilderPartA();

builder->BuilderPartB();

}

};
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();
cin.get();

return 0;

}
运行结果:
--- Product builder ---

Part A

Part B

--- Product builder ---

Part X

Part Y
转载的 都看看吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: