建造者模式
建造者模式就是一步一步的创建一个复杂的对象,而且允许用户指定复杂对象的类型和内容。建造者的模式结构一般如下图所示。
Builder 类是一个抽象类,用于定义一些创建子部件的方法,Builder类中应该还有一个 getResult() 方法,用于将创建好的部件组装成一个产品返回。
Director 类又称为指挥者,用于安排复杂对象的建造次序,通过construct() 方法,指导Builder类完成组装。
通过一个例子来更好的理解建造者模式,比如说现在的手机都支持更换主题,所有的主题建造过程都是类似的,比如说更换图标,背景,提示音,那么这个时候就可以通过建造者模式来完成这一过程。
先来设计一下Product和Builder类
public class Product {
private String mBackground;
private String mIcon;
private String mSounds;
public String getBackground() {
return mBackground;
}
public void setBackground(String background) {
mBackground = background;
}
public String getIcon() {
return mIcon;
}
public void setIcon(String icon) {
mIcon = icon;
}
public String getSounds() {
return mSounds;
}
public void setSounds(String sounds) {
mSounds = sounds;
}
}
public abstract class Builder {
private Product mProduct = new Product();
public Product getResult(){
return mProduct;
}
public abstract void buildBackground();
public abstract void buildIcon();
public abstract void buildSounds();
}
可见,不论什么样的主题,以上代码都是通用的,对于不同的主题,只需要在ConcreteBuilder中进行设置就可以了。
public class ConcreteBuilder extends Builder{
public void buildBackground(){
mProduct.setBackground("Black");
}
public void buildIcon(){
mProduct.setIcon("MyIcon");
}
public void buildSounds(){
mProduct.setSounds("MySounds");
}
}
既然产品生产过程已经构建出来了,那么就到了Director 类发挥作用的时候了,现在就由Director 来指挥各个部件的创造,并且将组装好的产品返回给客户端。
public class Director {
public Product construct(Builder builder){
builder.buildBackground();
builder.buildIcon();
builder.buildSounds();
return builder.getResult();
}
}
可见Director 类中只有一个简单的方法,有的时候当产品的部件不是很多的时候,完全可以将该方法放到Builder类中,从而省略Director 类。
已经看出,建造者模式和抽象工厂模式很类似。其实,抽象工厂模式更侧重于生产 “部件” , 而建造者模式侧重于将各个 部件组装成一个产品。