建造者模式可以允许用户在不知道内部细节的情况下,更为精细的控制对象的控制流程。该模式是为了将构建复杂的对象过程和它的部件进行解耦。
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程的创建不同的表示。
示例
public class Computer {
private String OS;
private String display;
private String board;
public Computer(String OS, String display, String board) {
this.OS = OS;
this.display = display;
this.board = board;
}
static class Builder {
private String OS;
private String display;
private String board;
public Builder setOS(String OS) {
this.OS = OS;
return this;
}
public Builder setDisplay(String display) {
this.display = display;
return this;
}
public Builder setBoard(String board) {
this.board = board;
return this;
}
public Computer create() {
return new Computer(OS, display, board);
}
}
}
上面的示例中由Computer中的静态内部类Builder来构建对象,使用者不需要考虑Computer是怎么样具体实现的,只需要在Builder中把需要的参数传入进去,便可以通过create方法拉实现Computer对象。
Android源码中的建造者模式
Android的源码中同样使用了建造者模式,在AlertDialog中便是使用AlertDialog.Builder来构建AlertDialog对象的。
new AlertDialog.Builder(this).setTitle("建造者模式")
.setCancelable(true)
.setMessage("使用建造者模式的对话框")
.create();
查看源码可以发现,Biulder中并不是直接通过new一个AlertDialog对象来构建对象的。而是通过AlertController.AlertParams把在create之前设置的参数先存放在AlertController.AlertParams中,然后在create中new出AlertDialog对象,通过apply方法传入dialog来对它进行设置。
create方法参考资料:Android源码设计模式
网友评论