美文网首页Effective Java 第三版
条目2:当构造函数有很多参数时,考虑用Builder模式

条目2:当构造函数有很多参数时,考虑用Builder模式

作者: lmtoo | 来源:发表于2018-02-12 16:30 被阅读0次

    静态工厂方法和构造函数都有一些限制:

    当有很多可选参数时不够灵活。

    叠进式的构造函数:

    叠进式的构造函数使编写客户端代码很难,并且阅读起来更难。

    冗长的类型参数也会引起微妙的bug。

    JavaBeans:

    JavaBean式的构造没有以上的问题,但是这种方式也有一些缺点:

    JavaBean可能处于非一致的状态。JavaBean无法使其为不可变类。

    为了消除这些缺点,可以在创建过程中,设置为“已冻结”的状态,然后在创建完毕之后设

    置为“解冻”状态。但是这种方式不是很常用,因为其在运行时而不是编译时引发错误。

    构造器模式:

    可读性与安全性兼顾的构造方式:构造器模式

    并不直接构造对象,而是通过调用静态构造方法,并传入必需参数来获取到一个builder对象,然后客户端调用builder对象的各种setter方法设置可选参数,最后调用builder对象的build方法,返回最终构造的目标对象。

    builder通常是其所创建对象类的静态成员类

    构造器模式将所有的默认值都聚合到了一起,并且其setter方法可以返回构造器本身,从而形成链式调用。

    NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

    为了检查无效参数,可将检查逻辑放置到builder的构造方法或者方法上;检查多个参数的逻辑课放置到build方法上。

    builder模式还很适合类继承

    builder模式也有其缺点:

    1、创建对象之前,必须要先创建Builder;创建Builder在实践中也是不可忽视的成本

    2、在性能关键的情况下,可能会成为问题

    3、Builder模式更加冗长啰嗦,所以只在4个参数或者更多的情况下考虑使用

    总之,builder模式是在构造方法或者静态工厂参数比较多的情况下的一个好选择。

    相关文章

      网友评论

        本文标题:条目2:当构造函数有很多参数时,考虑用Builder模式

        本文链接:https://www.haomeiwen.com/subject/vtzrtftx.html