第2条 遇到多个构造器参数时要考虑构建器

假如,对于这样的类,属性多达10多个,有如下几种处理方式。安全

处理方式1:ui

通常来讲,咱们大多采用重叠构造器模式,在这种模式下,提供一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,............以此类推,最后一个包含全部可选参数。对象

这个构造器许多你本不想传值的参数,还不得不为它们传值,若是“仅仅”是这6各参数,看起来还不算糟糕,问题是随着参数的增长,他很快就失去了控制。it

遇到这种许多构造器参数的时候,还有第二种办法 即JavaBean是模式,在这种模式下,调用一个无参构造器来建立对象。方法

其客户端调用方法以下:im

可是这种模式也有缺点,JavaBeans模式自己就有很严重的问题,由于构造过程被分到了几个调用中,在构造过程当中JavaBeans可能处于不一致的状态。类没法经过仅仅经过检验构造器参数的有效性来保证一致性。客户端

其实这种方式,我的以为很恶心,客户端须要写不少的代码。img

幸运的是还有第三种替代方法,即能保证安全性,又能够保证良好的可读性。这就是Builder模式,代码以下:安全性

客户端调用方法:build

这样的客户端很容易编写,更为重要的是,易于阅读。与构造器相比,builder的优点在于,builder能够有多个可变参数,构造器就像方法同样,只有一个可变参数。由于builder利用单独的方法来设置每一个参数,你想要多少个,它们就能够有多少个,直到每一个setter方法都有一个可变参数。

相关文章
相关标签/搜索