扎实的java功底系列(Effective java)2
遇到多个构造器参数时考虑使用构建器
还是那个问题,构造器参数太多的时候,就会出现各种混乱的情况。有些字段是必须的而有些字段是可选的,那么问题来了,必须的字段每个构造器都要带而可选的并不是每个都要带,产生很多构造器,这时候就要考虑使用构建器Builder
还是Car的例子:
package serviceprovider; public class Car { private int price; private int length; private int height; private int width; private String color; public static class Builder{ /** * 必要的参数 */ private int price = 0; private int length = 0; private int height = 0; private int width = 0; /** * 不必要的参数, 初始化成默认的值 */ private String color = null; public Builder(int price, int length, int height, int width){ this.price = price; this.length = length; this.height = height; this.width = width; } /** * 这里填写可选的字段 * @param val * @return */ public Builder color(String val){ color = val; return this; } public Car build(){ return new Car(this); } } /** * 带一个Builder类型参数的构造方法 * @param builder */ private Car(Builder builder){ price = builder.price; length = builder.length; height = builder.height; width = builder.width; color = builder.color; } /** * 调用build方法 */ Car car = new Car.Builder(250000, 3, 2, 2).color("blue").build(); }
当然,并不是所有的地方都是使用Builder的,只有当构造器或者静态工厂方法的参数很多,一般4 5个左右的时候,就可以使用Builder。 还有就是性能方面,创建对象之前要先创建构建器,那么就会造成一定的性能浪费。

浙公网安备 33010602011771号