前言
《Effective Java》中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看。其中包括我很喜欢的博客园博主五月的仓颉,他曾在自己的博文《给Java程序猿们推荐一些值得一看的好书》中也推荐过。加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔。如果有写的不对的地方、表述的不清楚的地方、或者其他建议,希望您能够留言指正,谢谢。
是什么
builder模式 是创建对象的一种方式。常见的对象创建方式还有 JavaBeans模式、可伸缩方法模式 等。
哪里用
扩展到很多可选参数的情景,“很多可选参数”指的是,当你的构造方法入参达到比如四个或更多时。
一个实体类,你预感它会在后期添加新的字段时,你也可以预先使用builder模式,因为你一开始没有使用,在后期类的参数演化到失控的时候,再想转为builder模式,之前写的代码就会是无用功。
怎么实现
我们通过 JavaBeans模式、可伸缩方法模式 与 Builder模式 创建对象,进行对比的方法,来看看Builder的实现,以及它的优点。
首先,我们来考虑一个场景,一瓶饮料,它的主要原料有很多,例如维生素、水、白砂糖等。我们先用可伸缩方法模式,来实现这样的一个类,代码如下:
public class Drink {
//水 必填参数
private final int water;
//糖 必填参数
private final int sweet;
//维生素 可选参数
private final int vitamins;
//饮料瓶颜色 可选参数
private final String color;
public Drink(int water, int sweet){
this(water, sweet, 0);
}
public Drink(int water, int sweet, int vitamins){
this(water, sweet, 0, "白色");
}
public Drink(int wate