Builder模式的定义很抽象:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(不管它,直接看应用)
Builder模式在Android开发中的应用:通过创建静态内部类Builder的方式来给外部类初始化赋值,增加代码的可读性。
一、例子:
假如有一个Person类,代码如下:
public class Person{
private String name;
private String place;
private int age;
private int height;
private int weight;
Person(String name,String place,int age,int height,int weight){
this.name = name;
this.place = place;
this.age = age;
this.height = height;
this.weight = weight;
}
}
Person类中有5个成员变量:姓名,籍贯,年龄,身高,体重。
创建Person实例:Person person = new Person("jack","beijing",23,170,59)。这样的传参方式可读性并不好,不看代码都不知道参数代表什么意思,当参数过多时也很麻烦。通过使用Builder设计模式可以很好的解决这个问题,代码如下:
public class Person{
private String name;
private String place;
private int age;
private int height;
private int weight;
private Person(Builder builder){
this.name = builder.name;
this.place = builder.place;
this.age = builder.age;
this.height = builder.height;
this.weight = builder.weight;
}
static class Builder{
private String name;
private String place;
private int age;
private int height;
private int weight;
public Builder name(String name){
this.name=name;
return this;
}
public Builder place(String place){
this.place=place;
return this;
}
public Builder age(int age){
this.age=age;
return this;
}
public Builder height(int height){
this.height=height;
return this;
}
public Builder weight(int weight){
this.weight=weight;
return this;
}
public Person build(){
return new Person(this);
}
}
}
上述代码中,首先将Person类的构造函数设为private,参数为Builder实例。Builder是一个静态的内部类,它拥有和外部类一样的成员变量:name,place,age,height,weight,并且拥有和成员变量同名的成员方法,在成员方法中给Builder类对应的成员变量赋值。最后在build()方法中创建一个外部类Person实例,将内部类Builder的实例(this)传入。
通过Builder模式创建Person实例的方法为:
Person.Builder builder = new Person.Builder();
Person person = builder.name("jack").place("beijing").age(23).height(170).weight(59).build()。
即首先创建内部类Builder的实例builder,然后调用builder的成员方法给变量赋值,最后调用build()方法创建外部类实例,将赋值后的内部类实例作为参数传入,这样就将内部类赋值的成员变量赋值给了外部类的成员变量。
二、具体应用
在Android中应用了Builder设计模式给成员变量赋值的有:对话框的创建,通知的创建,网络框架OkHttp中Request的创建等等。