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 在用此种方式。