前言
Builder模式是创建一个复杂对象的一种模式,此模式,用户不用知道内部构建细节,可以更好的控制构建流程。一个复杂对象可以有很多参数、部件,Builder模式就是为了将创建这个复杂对象的过程和对象的众多参数部件分开,已达到解耦的目的。这样构建过程和部件都可以自由扩展,两者之间的耦合也降到最低。
Builder模式
将一个复杂对象的构建与对象的参数或部件的创建分离,使得同样的创建过程可以有不同的结果。
例子
我们先来看一个简单实现builder的例子。
public class Person {
private int ID;
private int age;
private String name;
private int hight;
private int weight;
private Callback callback;
interface Callback {
void callback();
}
private Person(Builder builder) {
this.ID = builder.ID;
this.age = builder.age;
this.name = builder.name;
this.hight = builder.hight;
this.weight = builder.weight;
this.callback = builder.callback;
}
public static class Builder {
private int ID;
private int age;
private String name;
private int hight;
private int weight;
private Callback callback;
public Builder setID(int ID) {
this.ID = ID;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setHight(int hight) {
this.hight = hight;
return this;
}
public Builder setWeight(int weight) {
this.weight = weight;
return this;
}
public Builder setCallback(Callback callback) {
this.callback = callback;
return this;
}
public Person build() {
return new Person(this);
}
}
}
Person.Builder buider = new Person.Builder();
buider.setAge(13);
buider.setName("jack");
Person jack = buider.build();
1、私有化构建方法,使其只能通过内部类Builder的build方法创建
2、静态内部类作为桥梁,可以设置所有参数
3、通过build的方法创建Person实例。
4、由于Builder这个桥梁,使得构建时可以设置不同参数,把构建和参数解耦。
5、创建实例后,参数不可再改。
6、隐藏了构建过程,我们还可以在构建过程中增加一些处理,这些处理都是隐藏的,比如我们计算age是否是小于等于18岁等。
总结
整体来说Builder模式比较简单,核心就是隐藏构造方法,通过一个静态内部类封装构造。隐藏构建过程。
主要使用于对象比较复杂的时候, Android中我们使用最多的就是AlertDialog了。