1.傳統模式,通過構造器new出來
大量重載,添加屬性,則需要添加新的構造方法,不利於拓展
public class Animal {
private String eyes;
private String mouse;
public Animal(String eyes, String mouse) {
this.eyes = eyes;
this.mouse = mouse;
}
public Animal(String eyes) {
this.eyes = eyes;
}
}
2.傳統javabean,set get出來
常用的bean構造模式,因爲構造過程被分到了幾個調用中,在構造中 JavaBean 可能處於不一致的狀態。類無法僅僅通過判斷構造器參數的有效性來保證一致性,需要我們付出額外的操作來保證它的線程安全
public class Animal {
private String eyes;
private String mouse;
public String getEyes() {
return eyes;
}
public void setEyes(String eyes) {
this.eyes = eyes;
}
public String getMouse() {
return mouse;
}
public void setMouse(String mouse) {
this.mouse = mouse;
}
}
3.Builder模式
解耦,邏輯清晰。
鏈式調用,使用靈活,易於擴展。
public class Animal<main> {
final String eyes;
final String mouse;
public Animal(Builder builder) {
this.eyes = builder.eyes;
this.mouse = builder.mouse;
}
public static final class Builder{
String eyes;
String mouse;
public Builder() {
this.eyes = "人類眼睛";
this.mouse = "人類嘴巴";
}
public Builder eyes(String eyes) {
this.eyes = eyes;
return this;
}
public Builder mouse(String mouse) {
this.eyes = mouse;
return this;
}
public Animal build() {
return new Animal(this);
}
}
public static void main(String[] args){
Animal person = new Builder().eyes("andy eyes").build();
System.out.print(person.toString());
}
}
安卓的okhttp 在用此種方式。