建造者模式

直接创建对象的缺点

冗长的构造器参数

当一个类的成员变量很多,在new这个对象的时候传入参数,将导致参数列表变得冗长。

无法满足依赖

比如,如果用户设置了某个成员变量,就必须显式地设置另外相互依赖的成员变量;
或者成员变量之间有一定的约束条件。如果我们继续使用现在的设计思路,那校验逻辑就无处安放了。

不可变对象不能暴露set方法

如果我们希望对象是不可变对象,也就是说,对象在创建好之后,就不能再修改内部的属性值。要实现这个功能,我们就不能在类中暴露 set() 方法。

对象可能存在无效状态

new对象,后 set 成员变量,会导致部分必须的值在没有 set 之前,对象处于无效的状态。

使用建造者模式

在Builder类中做校验

把校验逻辑放置到 Builder 类中,先创建建造者,并且通过 set() 方法设置建造者的变量值,
然后在使用 build() 方法真正创建对象之前,做集中的校验,校验通过之后才会创建对象。

私有化构造函数实现不可变对象

这样我们就只能通过建造者来创建,并且创建出来的对象就是不可变对象了。

与工厂模式的区别