自己理解不深不全,多多見諒
法則二 遇到多個構造器參數時考慮使用構建器(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構建器則可以有多個可變參數。