自己理解不深不全,多多见谅
法则二 遇到多个构造器参数时考虑使用构建器(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构建器则可以有多个可变参数。