- 意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 动机:
- 适用性:
a. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式
b. 当构造过程必须允许被构造的对象有不同的表示时。 - 结构:
5. 参与者:
a. Builder: 为创建一个Product对象的各个部件指定抽象接口。
b. ConcreteBuilder:
实现Builder的接口以构建和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口
c. Director: 构造一个使用Builder接口的对象
d. Product:
表示被构造的复杂对象。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
6. 协作:
a. 客户端创建Director对象,并用它所想要的Builder对象进行配置。
b. 一旦产品部件被生成,导向器(Director)就会通知生成器(ConcreteBuilder)。
c. 生成器处理导线器的请求,并将部件添加到该产品中。
d. 客户从生成器中检索产品。
- 效果:
a. 它是你可以改变一个产品的内部表示
b. 它将构造代码和表示代码分开
c. 它使你可对构造过程进行更精细的控制 - 实现:
a. 装配和结构接口
b. 为什么产品没有抽象类
c. 在Builder中缺省的方法为空 - 代码示例:
//创建者 public interface Builder { public void buildPart(); } //具体创建者 public class ConcreteBuilder implements Builder{ private Product product; @Override public void buildPart() { this.product = product; } public Product getResult() { return product; } } //指示器 public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { builder.buildPart(); } } //产品 public class Product { public void describe() { System.out.println("This is product"); } }
- 已知应用
- 相关模式:
Abstract Factory与Builder相似,因为它也可以创建复杂对象。
主要的区别是Builder模式着重一步步构造复杂对象。而Abstract Factory着重于多个系列产品对象(简单的或是复杂的)。
Builder在最后的一步返回产品,而对于Abstract Factory
Composite通常是用Builder生成的。