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

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

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


叠进式的构造函数:

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

冗长的类型参数也会引起微妙的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模式)