博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第2条 遇到多个构造器参数时要考虑构建器
阅读量:6970 次
发布时间:2019-06-27

本文共 660 字,大约阅读时间需要 2 分钟。

hot3.png

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

处理方式1:

一般来说,我们大多采用重叠构造器模式,在这种模式下,提供一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,............以此类推,最后一个包含所有可选参数。

172235_DRY6_1034176.jpg

172235_DSWz_1034176.jpg

172236_VCNK_1034176.jpg

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

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

170101_qZN3_1034176.jpg

其客户端调用方法如下:

170214_HPhe_1034176.jpg

但是这种模式也有缺点,JavaBeans模式本身就有很严重的问题,因为构造过程被分到了几个调用中,在构造过程中JavaBeans可能处于不一致的状态。类无法通过仅仅通过检验构造器参数的有效性来保证一致性。

其实这种方式,个人觉得很恶心,客户端需要写很多的代码。

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

171359_22jt_1034176.jpg

171400_rN95_1034176.jpg

客户端调用方法:

171544_JixR_1034176.jpg

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

转载于:https://my.oschina.net/u/1034176/blog/645455

你可能感兴趣的文章
RSA2012系列(5):虚拟化安全总揽
查看>>
日常数据文件自动入hive数据库
查看>>
关hbase安装的困惑整了两天了还是这个报错!
查看>>
一个完整的nginx生产配置示例
查看>>
SVG格式图片相关
查看>>
OrderLogic
查看>>
CISCO_3750升级IOS实例
查看>>
folder.htt等文件的问题
查看>>
成本管理的6个基本内容
查看>>
企业渠道管理的六大失误
查看>>
CSS伪类与CSS伪元素的区别及由来具体说明
查看>>
asp.net aspx页面绑定数据
查看>>
AMD CEO罗瑞德称将调整战略 应对市场变化
查看>>
SSH的复习资料,找到宝了!
查看>>
Linux:无密码登录linux服务器
查看>>
JDBC 原理浅析
查看>>
android中SurfaceView组件使用解析
查看>>
python符号计算
查看>>
解决JsonFormat日期少一天问题
查看>>
面试常见问题
查看>>