我们都知道,Android源码中AlertDialog就是使用Build设计模式,这种模式的主要特点就是链式的,方便使用者的调用,使用者无需关心内部如何实现就可以方便调用。好,接下来用一个demo来说明。
在我理解来,实现Build设计模式,主要两个核心类,一个是你的目标对象,一个是Buider对象。首先我们定义一个Target对象,这个对象就是类似AlertDailog这个类,就是使用者要调用的类。
public class Target {
private String mTitle;
private String mMessage;
private int mIcon;
public static TargetBuilder builder(){
return new TargetBuilder();
}
public Target() {
}
public Target(String mTitle, String mMessage, int mIcon) {
this.mTitle = mTitle;
this.mMessage = mMessage;
this.mIcon = mIcon;
}
public Target showText(){//目标对象调用方法
System.out.println(mTitle+mMessage+mIcon);
return this;
}
}
从Target 类中我们可以看到,需要title、message、icon三个属性,我们在这个类中并没有直接给他们赋值,而是通过Builder类给他赋值。
接着再创建Builder类:
public class TargetBuilder {
private String mTitle;
private String mMessage;
private int mIcon;
public TargetBuilder setTitle(String title) {
this.mTitle = title;
return this;
}
public TargetBuilder setMessage(String message) {
this.mMessage = message;
return this;
}
public TargetBuilder setIcon(int icon) {
this.mIcon = icon;
return this;
}
public Target build(){
return new Target(mTitle,mMessage,mIcon);
}
}
其实,说到底,Builder类就是一个赋值和传值的类,如例,我们可以通过set方法给各个属性赋值,但必须有Builder的对象,所以我们在Target中定义一个静态方法,来创建Builder对象,然后就可以给Builder中的属性赋值了,赋值的过程有个重点,就是返回值必须返回当前对象,这样子赋值完一个值后方便继续给下一个属性赋值,赋值完后,我们在Builder类中再通过一个builde()方法,其实就是创建Target对象,本质就是把值传到Target类中,这个时候Target的属性就有值了,我们在Target里面创建我们需要的方法就可以。