1. 意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
2. 结构
此模式的结构如下图所示。
3. 参与者
- Builder
-- 为创建一个Product对象的各个部件指定抽象接口。 - ConcreteBuilder
-- 实现Builder的接口以构造和装配该产品的各个部件。
-- 定义并明确它所创建的表示。
-- 提供一个检索产品的接口。 - Director
-- 构造一个使用Builder接口的对象。 - Product
-- 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
-- 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
4. 协作
- 客户创建Director对象,并用它所想要的Builder对象进行配置。
- 一旦产品部件被生成,导向器就会通知生成器。
- 生成器处理导向器的请求,并将部件添加到该产品中。
- 客户从生成器中检索产品。
下图的交互图说明了Builder和Director是如何与一个客户协作的。
5. 效果
以下是Builder模式的主要效果:
1) 它使你可以改变一个产品的内部表示 Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
2) 它将构造代码和表示代码分开 Builder模式通过封装一个复杂对象的创建和表示方式提高对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个ConcreteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构建不同的Product。
3) 它使你可对构造过程进行更精细的控制 Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好地反应产品的构造过程。这使你可以更精细地控制构建过程,从而能更精细地控制所得产品的内部结构。
【摘自《设计模式 可复用面向对象软件的基础》机械工业出版社】