Builder模式:为什么许多示例实现与GOF图不同?

时间:2014-11-14 13:58:21

标签: java design-patterns

在之前的post中已经建议StringBuilder是构建器设计模式的一个示例,但它与四人组所描述的版本完全不同,似乎他们描述的设计模式更像是以下内容: http://www.oodesign.com/builder-pattern.html

这些都是Builder Design Pattern的例子,如果是,那么它们之间的共同点是什么?

导演钻石的目的是什么?这是否意味着一个混凝土建造者或许多人的复合?

2 个答案:

答案 0 :(得分:1)

实施可能彼此不同,但一般来说,它们遵循相同的方法。

您可能知道,Builder模式可以与药物配方并列 - 例如,医生可以在一个食谱中添加越来越多的药物处方,最后,当准备好了,给你完整的食谱。

当使用Builder模式构造一个对象时,我们会做类似的事情 - 调用方法,作为我们的对象如何构建的指令,当我们准备好时,我们用终端方法获取对象,例如叫build()

Builder实现的另一个例子是java.util.stream.Stream类,它是Java 8中Stream API的一部分。

它的工作方式非常相似 - 您可以调用Stream上的非终端操作,最后获得内置 { {1}},基于提供的标准列表。例如:

Stream

更多信息:

答案 1 :(得分:1)

我也对此感到非常困惑。据我所知,很多" Builder设计模式"示例基于Josh Bloch's effective Java Item#2;这可以被视为GoF的Builder模式的简化。当有太多方法来构建 a 具体对象时,看起来Bloch的实现目标是引入简单性 - 或者具体对象表示自身的方式略有不同,从而导致构造函数过多具有相似类型的参数 - 示例:具有可选和必需属性。 (伸缩构造器的反模式使用Bloch的构建器模式解决)

GoF通过&#34; Director&#34;与整个创作过程有另一层次的间接性。封装有关构建产品所需的 步骤的知识 - 这个创建算法在产品中保持通用 - 以及表示必要的构建器接口(契约)的接口/基类,它们知道如何< / strong>做每一步。每个构建器实现都返回自己的具体产品。