扎实的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。 还有就是性能方面,创建对象之前要先创建构建器,那么就会造成一定的性能浪费。

 

posted @ 2015-07-11 15:03  loutao  阅读(203)  评论(0)    收藏  举报