我是在学习java的时候接触到builder模式的,但是我不明白builder是怎么把setter方法链起来的
//this one compiles
new AlertDialog.Builder().setApplyButton("apply").setText("stop");
//this one doesn't compile
new NormalAlert().setApplyButton("apply").setText("stop");
生成器方法返回this
(生成器实例本身),以便可以在其上调用更多方法。通常,定义名为build
的方法来返回构造的对象。
的例子:
public class Person {
private String name;
private Integer age;
public static class Builder {
private String name;
private Integer age;
public Builder name(String name){
this.name = name;
return this;
}
public Builder age(Integer age){
this.age = age;
return this;
}
public Person build() {
return new Person(this);
}
}
private Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
}
}
因为在普通的类设置器中通常返回void你不能在void类型上调用另一个类设置器
构建器模式的简单演示如下
public class Alert {
String prop1;
String prop2;
Alert(AlertBuilder builder){
this.prop1 = builder.prop1;
this.prop2 = builder.prop2;
}
}
class AlertBuilder{
String prop1;
String prop2;
public AlertBuilder setProp1(String prop1) {
this.prop1 = prop1;
return this;
}
public AlertBuilder setProp2(String prop2) {
this.prop2 = prop2;
return this;
}
public Alert build(){
return new Alert(this);
}
}
在这里你有你的主类和一个构建器类。构建器模式会不断更新自己,当您准备好构建"真正的"构建器时,对象,您调用构建方法并一次获取所有字段。如果你感兴趣,我建议你阅读更多关于Builder设计模式的内容。