关于builder模式的一点想法

来源:互联网 发布:ubuntu系统安装教程 编辑:程序博客网 时间:2024/05/16 09:46
当一个对象的创建需要复杂的步骤或过程,不妨把这个步骤或过程隔离和对象的创建动作本身隔离开来,这也就是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模式的核心就是:把一个复杂类的对象的构建过程隔离封装起来。