当一个对象的创建需要复杂的步骤或过程,不妨把这个步骤或过程隔离和对象的创建动作本身隔离开来,这也就是builder模式的用武之地。
例如:
有某个类ClassA,它的对象在构造时有10个参数需要初始化。通常最容易想到的方法是为这个类添加一个含有10个参数的构造函数,然后在构造函数中验证每个参数的有效性,这样做会大大加大ClassA的构造函数的复杂性。
Class ClassA
{
public:
ClassA(int p1, int p2, int p3, int p4, ..., int p10)
{
if (p1 xxx p2 xxx ... p10)
{
xxxx;
}
config ClassA with p1~p10;
}
}
在这个情景下,我们可以把对p1~p10的验证代码从ClassA的构造函数中提取出来,封装到一个builder中,这样使ClassA的构造函数更加简洁。而当今后需求变动需要更改p1~p10的验证条件时,无需变动ClassA的构造函数。这也是OOD/P中封装变化思想的典型体现。
再有,有时候一个类的许多初始化参数并不能一下子准备妥当,这时可以把收集各个参数的过程封装到一个builder中,待所有参数完好后,由builder调用类的构造函数,创建出对象。
总之,builder模式的核心就是:把一个复杂类的对象的构建过程隔离封装起来。
例如:
有某个类ClassA,它的对象在构造时有10个参数需要初始化。通常最容易想到的方法是为这个类添加一个含有10个参数的构造函数,然后在构造函数中验证每个参数的有效性,这样做会大大加大ClassA的构造函数的复杂性。
Class ClassA
{
public:
ClassA(int p1, int p2, int p3, int p4, ..., int p10)
{
if (p1 xxx p2 xxx ... p10)
{
xxxx;
}
config ClassA with p1~p10;
}
}
在这个情景下,我们可以把对p1~p10的验证代码从ClassA的构造函数中提取出来,封装到一个builder中,这样使ClassA的构造函数更加简洁。而当今后需求变动需要更改p1~p10的验证条件时,无需变动ClassA的构造函数。这也是OOD/P中封装变化思想的典型体现。
再有,有时候一个类的许多初始化参数并不能一下子准备妥当,这时可以把收集各个参数的过程封装到一个builder中,待所有参数完好后,由builder调用类的构造函数,创建出对象。
总之,builder模式的核心就是:把一个复杂类的对象的构建过程隔离封装起来。