您的位置:首页 > 产品设计 > UI/UE

设计模式实现(九)--- 建造者模式(Builder)

2014-07-29 21:06 267 查看
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示的意图时,我们需要应用一个设计模式,“建造者模式(Builder)”,又叫生成器模式。

建造者模式可以讲一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

如果我们用了建造者模式,那么用户就只需指定需要建造的类型可以得到它们,而具体建造的过程和细节就不需要知道了。



建造者模式实例

#include <string>
#include <iostream>
using namespace std;

//Product类---产品类,由多个部件组成
class Product
{
public:
string part1,part2;
public:
void show()
{
cout << part1 << endl;
cout << part2 << endl;
}

};

//Builder类---抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult();
class Builder
{
public:
virtual void SetPart1(string part1) = 0;	//此处用虚函数,如果该类的子类没有对着两个类进行实现的话,则会出现编译错误。也就是起到了抽象类的作用
virtual void SetPart2(string part2) = 0;
virtual Product &getResult() = 0;
};
//ConcreteBuilder1类---具体建造者类
class ConcreteBuilder1 : public Builder
{
public:
Product product;
public:
void SetPart1(string part1)
{
product.part1 = "具体类1--方法1";
}
void SetPart2(string part2)
{
product.part2 = "具体类1--方法2";
}
Product &getResult()
{
return product;
}
};

class ConcreteBuilder2 : public Builder
{
public:
Product product;
public:
void SetPart1(string part1)
{
product.part1 = "具体类2--方法1";
}
void SetPart2(string part2)
{
product.part2 = "具体类2--方法2";
}
Product &getResult()
{
return product;
}
};
//Director类---指挥者类
class Director
{
public:
void Construct(Builder &builder)
{
builder.SetPart1("111");			//决定调用建造类中的哪些方法,可以选择都进行调用(比如创建人的头、躯干、四肢),或者部分调用(比如有些车可以飞(翅膀),有些车可以游(叶轮))
builder.SetPart2("111");
}
};
int main()
{
Director 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();

return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: