请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 266|回复: 2

关于Builder模式的疑问

[复制链接]
发表于 2018-3-28 09:42:44 | 显示全部楼层 |阅读模式
public class XiaoMing {

    private String name;
    private String age;
    private String address;
    private String idNumber;
    private String phoneNumber;


    public XiaoMing setName(String name) {
        this.name = name;
        return this;
    }

    public XiaoMing setAge(String age) {
        this.age = age;
        return this;
    }

    public XiaoMing setAddress(String address) {
        this.address = address;
        return this;
    }

    public XiaoMing setIdNumber(String idNumber) {
        this.idNumber = idNumber;
        return this;
    }

    public XiaoMing setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
        return this;
    }
   
}


我这样写的话,也可以达到链式调用的效果,而且也省去了多个参数的构造,感觉不出来Builder的优势在哪啊

书上说是隐藏实现过程啥的,如果说类比较复杂,那干脆新建一个类去完成,用组合的方式来代替,不是一样的吗?
发表于 2018-3-28 10:43:58 | 显示全部楼层
那是因为你看的书没讲清楚,
Builder模式本身就不是用来取代set方法链式调用的。

当你要构建的对象有多个内部状态(成员变量),且这些内部状态必须整体设置、甚至设置它们时还有先后要求,此时通常需要借助于多参数的构造器来实现。
但多参数的构造器又带来其他弊端;首先是臃肿;其次是对该构造器的使用者来说,他可能看不懂这些构造参数的意义(可读性)不强。
——此时,就会使用Builder模式。

不过话说回来,很多项目(包括不少很有名的API),前期设计时确实采用的是set链式调用或多参数的构造器,但后来在项目重构时,往往还是会改为使用Builder模式。
 楼主| 发表于 2018-4-2 16:28:18 | 显示全部楼层
kongyeeku 发表于 2018-3-28 10:43
那是因为你看的书没讲清楚,
Builder模式本身就不是用来取代set方法链式调用的。

看设计模式,看的脑壳发晕,一脸懵逼,是一种什么样的体验。。项目太小,demo太小,怼源码又好难熬。。。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-9-23 09:20 , Processed in 0.265820 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表