學解《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構建器則可以有多個可變參數。


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