关于 Builder 模式 详述:http://blog.csdn.net/jjwwmlp456/article/details/39890699
先来张图
看到 Android 中 使用了 Builder 模式的地方还是很多的。
使用时 大概如下:
Notification noti = new Notification.Builder(context).build(); AlertDialog dialog = new AlertDialog.Builder(context).create();
在builder()和create()之前 还可以创建多个属性,类似下面的例子
示例
/**
* author : stone
* email : aa86799@163.com
* time : 15/7/3 10 26
*/
public class TestBuilder {
private int a;
private String b;
public int getA() {
return a;
}
public String getB() {
return b;
}
protected TestBuilder(Builder builder) {
this.a = builder.ma;
this.b = builder.mb;
}
public static class Builder {
private int ma;
private String mb;
public Builder createA(int a) {
this.ma = a;
return this;
}
public Builder showB(String b) {
this.mb = b;
return this;
}
public TestBuilder build() {
return new TestBuilder(this);
}
}
public static void main(String[] args) {
TestBuilder tb = new TestBuilder.Builder()
.createA(88)
.showB("susan")
.build();
}
}
注:
1. 这里是通过静态内部类Builder来构造零件
2. 每个零件的构建方法返回该构建者
3. 外部实际对象的构造方法的访问符 应是 private或protected,使其只能通过内部类来创建
与普通的Java-Bean的对比:
Bean中用setter 或 构造方法中一堆参数, 来给属性赋值
这里,用new Builder().a.b.c...build();
个人感觉,好处就是:
1. 有选择的构建需要的属性,不需要为了使用哪个构造方法而纠结
2. 调用时,赋值一个属性后,编译器立即提示其它可执行的构建属性的方法,书写更方便、快速