建造者模式
将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
class Person //抽象类,预留ule接口
{
public:
virtual void createHead() = 0;
virtual void createHand() = 0;
virtual void createBody() = 0;
virtual void createFoot() = 0;
};
class ThinPerson :public Person ///实现抽象类瘦子,
{
void createHead()
{
cout << "thin head" << endl;
}
void createHand()
{
cout << "thin hand" << endl;
}
void createBody()
{
cout << "thin body" << endl;
}
void createFoot()
{
cout << "thin foot" << endl;
}
};
class FatPerson :public Person //胖子
{
void createHead()
{
cout << "fat head" << endl;
}
void createHand()
{
cout << "fat hand" << endl;
}
void createBody()
{
cout << "fat body" << endl;
}
void createFoot()
{
cout << "fat foot" << endl;
}
};
class Director
{
private:
Person *p;//基类的指针
public:
Director(Person *temp) //传递对象
{
p = temp;//虚函数实现多态
}
void create()
{
p->createHead();
p->createHand();
p->createBody();
p->createFoot();
}
};
//客户端代码:
int mainT()
{
Person *p = new FatPerson();
Director *d = new Director(p);
d->create();
delete d;
delete p;
cin.get();
return 0;
}
使用范围
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2.当构造过程必须允许被构造的对象有不同表示时。
角色
1.builder:为创建一个产品对象的各个部件指定抽象接口。
2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3.Director:构造一个使用Builder接口的对象。
4.Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。