建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
一个产品常有不同的组成成分作为产品的零件,它们通常叫做产品的内部表象。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户不需要知道所生成的产品的对象有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎样组成产品。下面是一个示例性的实现。
在这个示例性的系统中,最终产品Product只有两个零件,即Part1和Part2.相应的建造方法也有两个:builderPart1和builderPart2.可以看出本模式涉及到四个角色:
抽象建造者(Builder):给出一个抽象接口,以规范产品对象的各个组成部分的建造。
具体建造者(Concrete Builder):担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序的调用下创建产品的实例。
导演者(Director):是与客户端打交道的角色,将创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者。
产品(Product):建造中的对象。
Builder:
builder
public interface Builder ...{
![]()
void buildPart1();
![]()
void buildPart2();
![]()
Product retrieveResult();
![]()
}// END INTERFACE DEFINITION Builder
![]()
ConcreteBuilder:
![]()
public class ConcreteBuilder : Builder ...{
![]()
private Product product;
![]()
public void buildPart1() ...{
![]()
//build the first part of the product
![]()
}
![]()
public void buildPart2()...{
![]()
//build the second part of the product
![]()
}
![]()
public Product retrieveResult() ...{
![]()
return product;
![]()
}
![]()
}// END CLASS DEFINITION ConcreteBuilder
![]()
Director:
![]()
public class Director ...{
![]()
private Builder builder;
![]()
public void Director()
![]()
...{
![]()
}
![]()
public void construct()...{ //产品构造方法,负责调用各个零件建造方法
![]()
builder=new ConcreteBuilder();
![]()
builder.builderPart1();
![]()
builder.builderPart2();
![]()
builder.retrieveResult();
![]()
}
![]()
}// END CLASS DEFINITION Director
![]()
Product:
![]()
public interface Product ...{
![]()
}// END INTERFACE DEFINITION Product
上面的系统中只有一个产品类,对应地也有一个具体建造者类。
