首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Builder设计模式和Factory设计模式有什么不同?

Builder设计模式和Factory设计模式有什么不同?
EN

Stack Overflow用户
提问于 2009-04-16 19:39:05
回答 26查看 320.8K关注 0票数 777

Builder设计模式和Factory设计模式有什么不同?

哪一个更有优势?为什么?

如果我想测试和比较/对比这些模式,我如何将我的发现表示为图形?

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2009-04-16 19:46:53

对于设计模式,通常没有适用于所有情况的“更有利”的解决方案。这取决于您需要实现什么。

来自维基百科:

  • 生成器专注于一步一步地构造复杂对象。抽象工厂强调一系列产品对象(简单的或复杂的)。Builder返回产品作为最后一步,但就抽象工厂而言,产品返回immediately.
  • Builder通常构建Composite.
  • Often,设计开始使用工厂方法(不太复杂,更可定制,子类激增),并发展到抽象工厂,原型,或生成器(更灵活,更复杂),当设计师发现更多的灵活性是needed.
  • Sometimes创建模式的补充:生成器可以使用其他模式之一来实现要构建的组件。抽象工厂、生成器和原型可以在其implementations.

中使用单例

工厂设计模式的维基百科词条:http://en.wikipedia.org/wiki/Factory_method_pattern

构建器设计模式的维基百科条目:http://en.wikipedia.org/wiki/Builder_pattern

票数 540
EN

Stack Overflow用户

发布于 2012-01-22 13:15:43

工厂只是一个围绕构造函数的包装函数(可能在不同的类中)。关键区别在于,工厂方法模式要求在单个方法调用中构建整个对象,所有参数都在一行中传递。将返回最终的对象。

另一方面,构建器模式本质上是一个包装对象,它包含了您可能想要传递到构造函数调用中的所有可能的参数。这允许您使用setter方法来慢慢构建参数列表。构建器类上的另一个方法是build()方法,它只是将构建器对象传递给所需的构造函数,并返回结果。

在像Java这样的静态语言中,当您有大量(可能是可选的)参数时,这就变得更加重要,因为它避免了对所有可能的参数组合使用伸缩构造函数的要求。此外,构建器还允许您使用setter方法来定义只读或私有字段,这些字段在调用构造函数后不能直接修改。

Basic工厂示例

代码语言:javascript
运行
复制
// Factory
static class FruitFactory {
    static Fruit create(name, color, firmness) {
        // Additional logic
        return new Fruit(name, color, firmness);
    }
}

// Usage
Fruit fruit = FruitFactory.create("apple", "red", "crunchy");

Basic生成器示例

代码语言:javascript
运行
复制
// Builder
class FruitBuilder {
    String name, color, firmness;
    FruitBuilder setName(name)         { this.name     = name;     return this; }
    FruitBuilder setColor(color)       { this.color    = color;    return this; }
    FruitBuilder setFirmness(firmness) { this.firmness = firmness; return this; }
    Fruit build() {
        return new Fruit(this); // Pass in the builder
    }
}

// Usage
Fruit fruit = new FruitBuilder()
        .setName("apple")
        .setColor("red")
        .setFirmness("crunchy")
        .build();

比较这两个维基百科页面中的代码样本可能是值得的:

http://en.wikipedia.org/wiki/Factory_method_pattern

http://en.wikipedia.org/wiki/Builder_pattern

票数 440
EN

Stack Overflow用户

发布于 2009-04-16 19:44:50

工厂模式几乎可以看作是Builder模式的简化版本。

工厂模式中,工厂负责根据需要创建对象的各种子类型。

工厂方法的用户不需要知道该对象的确切的子类型。工厂方法createCar的一个示例可能返回FordHonda类型的对象。

构建器模式中,不同的子类型也是由构建器方法创建的,但是在同一子类中对象的组成可能不同。

要继续汽车示例,可以使用createCar构建器方法创建具有4个气缸的引擎的Honda-typed对象,或创建具有6个气缸的Honda-typed对象。构建器模式允许这种更精细的粒度。

维基百科上提供了Builder patternFactory method pattern的图表。

票数 305
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/757743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档