引用: http://www.itdecent.cn/p/1ddb69f1f67e 引用經(jīng)典Builder/變種Builder模式及自動化生成代碼插件
插件: http://blog.csdn.net/SoberChina/article/details/72953989?locationNum=2&fps=1
例子1:
使用 new Person.Builder().name("小豬").age("20").build();
1.Person類的構(gòu)造函數(shù)是私有的。這樣就不能直接實例化這個類
2.Person類是不可變的。里面的屬性都是final的。只能在構(gòu)造函數(shù)中初始化。然后提供了屬性的get函數(shù),可以去獲取值。
public class Person {
private final String name; //變量都是final 只能在構(gòu)造函數(shù)中初始化
private final String age;
private Person(Builder builder) {
name = builder.name;
age = builder.age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
public static final class Builder {
private String name;
private String age;
public Builder() {
}
public Builder name(String val) {
name = val;
return this;
}
public Builder age(String val) {
age = val;
return this;
}
public Person build() {
return new Person(this);
}
}
}
例子2
使用 Person.newBuilder().name("小豬").age("20").build();
1、使用可以減少new,使用newBuilder()
2、有copy功能 newBuilder(Person copy)
/**
* Created by lch on 2017/10/26.
*/
public class Person {
private final String name; //變量都是final 只能在構(gòu)造函數(shù)中初始化
private final String age;
private Person(Builder builder) {
name = builder.name;
age = builder.age;
}
public static Builder newBuilder() {
return new Builder();
}
public static Builder newBuilder(Person copy) {
Builder builder = new Builder();
builder.name = copy.name;
builder.age = copy.age;
return builder;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
public static final class Builder {
private String name;
private String age;
public Builder() {
}
public Builder name(String val) {
name = val;
return this;
}
public Builder age(String val) {
age = val;
return this;
}
public Person build() {
return new Person(this);
}
}
}