1.目的
当一个对象的结构比较复杂的时候(如组合),需要多个部分分别生成时,可以考虑使用建造者模式,builder提供构造各个成员部分的函数,然后由director来调builder的接口来完成对象的拼接(也可以由客户来实现对象的拼接,但是如果由director来调就可以对客户屏蔽builder的多个接口,屏蔽对象的生成过程)。对客户屏蔽对象的生成过程,可以说是建造者模式的主要目的
2.代码
builder.h
#ifndef BUILDER_H_
#define BUILDER_H_
#include <iostream>
using namespace std;
class PersonBuilder
{
public:
virtual ~PersonBuilder()
{}
virtual void buildHead()=0;
virtual void buildBody()=0;
virtual void buildArm()=0;
virtual void buildLeg()=0;
void show()
{
cout<<"head = "<<head<<" body = "<<body<<" leg = "<<leg<<" arm = "<<arm<<endl;
}
protected:
int head;
int body;
int arm;
int leg;
};
class FatBuilder:public PersonBuilder
{
public:
void buildHead()
{
head = 10;
}
void buildBody()
{
body = 20;
}
void buildArm()
{
arm = 3;
}
void buildLeg()
{
leg = 8;
}
};
class ThinBuilder:public PersonBuilder
{
public:
void buildHead()
{
head = 5;
}
void buildBody()
{
body = 15;
}
void buildArm()
{
arm = 2;
}
void buildLeg()
{
leg = 5;
}
};
class Director
{
public:
void setBuilder(PersonBuilder& builder)
{
this->builder = &builder;
}
void builderPerson()
{
builder->buildHead();
builder->buildBody();
builder->buildArm();
builder->buildLeg();
};
private:
PersonBuilder* builder;
};
#endif /* BUILDER_H_ */
builder.cpp
#include "Builder.h"
void builder()
{
FatBuilder fat;
ThinBuilder thin;
Director director;
director.setBuilder(fat);
director.builderPerson();
fat.show();
director.setBuilder(thin);
director.builderPerson();
thin.show();
}
运行结果:
head = 10 body = 20 leg = 8 arm = 3
head = 5 body = 15 leg = 5 arm = 2