模式定义
Builder模式很好地将一个复杂对象的创建与该对象内部的各个部件的组装分离开来。它和 Abstract Factory模式有相似的地方,但是Abstract Factory主要提供了一个创建一些列相关或相互依赖的对象的接口,无需知道指定他们具体的类(生产者),而Builder模式着重于部件的组装和对象创建的关系。
使用范围
- 对象的创建由一系列复杂的部件组装而成时
- 不同的对象有不同的组装过程
使用方法
考察Builder的类图
![](http://www.zigzagsoft.net/main/designpattern_image/builder.jpg)
Director好比是一个发号施令者,它需要完成一个对象Product。可这个对象有不同的组装方式,即部件Part可以不同,部件之间的关系也可以不同。完成这个组装方式的人可以有多个不同的ConcreteBuilder,他们实施不同的部件与部件之间的组装,最后交付给Director一个完整的Product。
举例说明
来拿开发商开发一套房子来作为例子。开发商好比一个Direcor,它的唯一目标是建造Contruct一个房子,但它本身不建设房子,任务是交由建筑商Builder完成。
public class Director {
public void contruct(AbstractHouseBuilder builder){
builder.design();
builder.build();
builder.decorate();
}
}
AbstractHouseBuilder好比一个抽象概念的建筑商,建筑一套房子必须完成如下的部件组装过程:design(), build()和最后的decorate()。
public abstract class AbstractHouseBuilder {
public abstract void design();
public abstract void build();
public abstract void decorate();
}
CommonHouseBuilder好比是一个专门建设普通住宅的建筑商,注意它没有具体的decorate()方法主体。
public class CommonHouseBuilder extends AbstractHouseBuilder{
public void design() {
System.out.println("common house: design");
}
public void build() {
System.out.println("common house: build");
}
public void decorate() {
// do nothing
return;
}
}
GoodHouseBuilder是一个专门建设精装修高档住宅的建筑商,部件的构造方法和CommonHouseBuilder不同,同时它还有decorate()方法。此处它和CommonHouseBuilder的区别在于组装方式的不同。
public class GoodHouseBuilder extends AbstractHouseBuilder{
public void design() {
System.out.println("good house: design");
}
public void build() {
System.out.println("common house: build");
}
public void decorate() {
System.out.println("good house: decorate");
}
}
Builder模式的类结构图为:
![](http://www.zigzagsoft.net/main/designpattern_image/builder-example.jpg)
客户端的使用方法为:
public class Client {
public static void main(String args[]){
Director director = new Director();
AbstractHouseBuilder builder = new CommonHouseBuilder();
director.contruct(builder);
builder = new GoodHouseBuilder();
director.contruct(builder);
}
}
下载示例