假如,对于这样的类,属性多达10多个,有以下几种处理方式。
处理方式1:
一般来说,我们大多采用重叠构造器模式,在这种模式下,提供一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,............以此类推,最后一个包含所有可选参数。
这个构造器许多你本不想传值的参数,还不得不为它们传值,如果“仅仅”是这6各参数,看起来还不算糟糕,问题是随着参数的增加,他很快就失去了控制。
遇到这种许多构造器参数的时候,还有第二种办法 即JavaBean是模式,在这种模式下,调用一个无参构造器来创建对象。
其客户端调用方法如下:
但是这种模式也有缺点,JavaBeans模式本身就有很严重的问题,因为构造过程被分到了几个调用中,在构造过程中JavaBeans可能处于不一致的状态。类无法通过仅仅通过检验构造器参数的有效性来保证一致性。
其实这种方式,个人觉得很恶心,客户端需要写很多的代码。
幸运的是还有第三种替代方法,即能保证安全性,又可以保证良好的可读性。这就是Builder模式,代码如下:
客户端调用方法:
这样的客户端很容易编写,更为重要的是,易于阅读。与构造器相比,builder的优势在于,builder可以有多个可变参数,构造器就像方法一样,只有一个可变参数。因为builder利用单独的方法来设置每个参数,你想要多少个,它们就可以有多少个,直到每个setter方法都有一个可变参数。