意图
将一个复杂对象的构建与它的表示分离,是的同样构建过程可以创建不同的表示。
结构
其中
- Builder为创建一个Product对象的哥哥部件指定抽象接口
- ConcreteBuilder实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口。
- Director(导演类)构造一个使用Builder接口的对象。
- Product表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成组件的类,包括将这些组件装配成最终产品的接口。
适用性
Builder模式适用于:
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象由不同的表示时。
代码示例
// 抽象生成器类
abstract class Generator {
public abstract void part();
public abstract void generate();
}
// 具体生成器类
class ConcreteGenerator extends Generator {
private Product product;
@Override
public void part() {
// 生成产品的某个部件
product = new Product();
}
@Override
public void generate() {
part();
// 产品组装
product.assemble();
}
public Product getResult() {
return product;
}
}
// 产品类
class Product {
public void assemble() {
System.out.println("产品组装完成");
}
}
public class GeneratorPatternDemo {
public static void main(String[] args) {
Generator generator = new ConcreteGenerator();
generator.generate();
Product product = ((ConcreteGenerator)generator).getResult();
}
}