建造者模式是一个一步一步创建一个复杂对象的设计模式。它可以在一个复杂对象执行相同的方法不同的顺序但是结果不同的特殊情况下对这个复杂对象的构造过程又更加精细的控制。
它一般被用于以下两种情况:① 复杂的对象构建,多个函数,执行的顺序不同,产生的结果也不同的情况 ② 当一个对象初始化特别复杂但里面的各个成员变量都有默认值时。
public class Builder {
private Product mProduct; // Product类是产品类
Builder(Product product) {
mProduct = product;
}
public void buildA() {
mProduct.methodA();
}
public void buildB() {
mProduct.methodB();
}
public Product create() {
return mProduct;
}
}
public class Director {
private Builder mBuilder = null;
Director(Builder builder) {
mBuilder = builder;
}
public void createProduct() {
mBuilder.buildB();
mBuilder.buildA();
}
}
// 以上是建造者模式的经典实现,然而在Android的具体实现中(例如Dialog)
// 往往不会有Director角色的出现,而是直接使用一个Builder来进行对象的封装
// 这个Builder通常为链式调用,它的关键点在于每一个setter方法都返回自身(return this)
// 这就使得setter方法可以链式调用,如下:
public class Builder {
private Product mProduct; // Product类是产品类
Builder(Product product) {
mProduct = product;
}
public void setA() {
mProduct.methodA();
return this;
}
public void buildB() {
mProduct.methodB();
return this;
}
public Product create() {
return mProduct;
}
}
// 我们需要这样调用
new Bilder().setA().setB().create();