学解《Effective java》之 构造器到构建器的跨越

自己理解不深不全,多多见谅


法则二 遇到多个构造器参数时考虑使用构建器(Builder)

    面临情况如下:

  一、重叠构造器(telescoping constructor):遇见多参的第一选择,如下:

   public class Test{

    private int mA;

private int mB;

public Test(){} //第一个构造器,无参

public Test(int A){……} //加一层

public Test(int A, int B){……} //再加一层

…… //加多层

}

在使用创建对象的时候,若是参数太多,易出错。


二、JavaBean模式

    先构造一个无参构造器,然后使用set()方法处理参数。

……

……

Test t = new Test();

t.setA(1);

t.setB(2);

……

……

易读,但也有缺点,不能保证线程状态一致


三、Builder模式

依据已有类,创建一个Builder对象,并将所需填充好之后,将对象返给构造器,如下所示:

public class Test{

    private int mA;

private int mB;


public static class Builder{

private int bA = 0;

private int bB = 0;

public Builder(){}

public Builder mA(int a){ this.bA = a; return this; } ///返回builder本身,则可以连续调用 Test.Builder.mA(1).mB(1);

public Builder mB(int b){ this.bB = b; return this; }

}

public Test(Builder builder){

this.mA = builder.bA;

this.mB = builder.bB;

}

}

一般构造器的可变参数是一个,利用builder构建器则可以有多个可变参数。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章