public class TargetClass(){
//所有变量都要是private final的
private final String name;
private final int id;
private final boolean flag;
//私有化构造函数,不对外暴露
private TargetClass(Builder builder){
this.name = builder.name;
this.id = builder.id;
this.flag = builder.flag;
}
public String getName(){
return name;
}
public int getId(){
return id;
}
public boolean isFlag(){
return flag;
}
//使用内部类创建构造者
//内部类可以调用自己的私有方法
//因此可以通过内部类来调用上面私有化的构造方法
public static class Builder(){
//也是必须是private final的
private final String name;
private final int id;
private final boolean flag;
public Builder(){
}
//为了实现链式调用,每次都返回Builder对象
public Builder name(String name){
this.name = name;
return this;
}
public Builder id(int Id){
this.id = Id;
return this;
}
public Builder isFlag(boolean isFlag){
this.flag = isFlag;
return this;
}
//创建TargetClass的对象
public TargetClass build(){
return new TargetClass(this);
}
}
}
调用的时候只需要这样即可优雅的创建TargetClass的实例:
TargetClass target = new TargetClass.Builder()
.name("abc")
.id(123)
.isFlag(true)
.build();