Builder设计模式和Factory设计模式之间的区别是什么?

哪一种更有利?为什么?

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


当前回答

两者都是创造模式,以创建对象。

1) 工厂模式-假设您有一个超级类和N个子类。对象的创建取决于传递的参数/值。

2) 生成器模式-创建复杂对象。

Ex: Make a Loan Object. Loan could be house loan, car loan ,
    education loan ..etc. Each loan will have different interest rate, amount ,  
    duration ...etc. Finally a complex object created through step by step process.

其他回答

两者非常相似,但如果您有大量用于对象创建的参数,其中一些参数是可选的,并且具有一些默认值,请选择生成器模式。

工厂:用于创建对象的实例,其中对象的依赖项完全由工厂保存。对于抽象工厂模式,通常有许多相同抽象工厂的具体实现。工厂的正确实现是通过依赖注入注入的。

生成器:用于构建不可变对象,当要实例化的对象的依赖项部分是预先知道的,部分是由生成器的客户端提供的。

构建模式强调创建对象的复杂性(通过“步骤”解决)

抽象模式强调(多个但相关的)对象的“抽象”。

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

来自维基百科:

Builder专注于构建一步一步复杂的物体。摘要工厂强调产品系列对象(简单或复杂)。生成器将产品作为最终产品返回步骤,但就抽象而言工厂关心,产品得到立即返回。生成器通常构建一个复合。通常,设计开始时使用工厂方法(不那么复杂,更多可定制,子类激增)并向抽象工厂发展,原型或生成器(更灵活,更复杂)发现更灵活的地方需要。有时创造模式是互补的:构建者可以使用要实现的其他模式构建哪些组件。摘要工厂、建造商和原型可以使用Singleton实现。

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

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

生成器和抽象工厂生成器设计模式在某种程度上与抽象工厂模式非常相似。这就是为什么在使用其中一种或另一种情况时,能够区分不同的情况是很重要的。在抽象工厂的情况下,客户端使用工厂的方法来创建自己的对象。在Builder的例子中,Builder类被指示如何创建对象,然后被要求创建对象,但是类的组合方式取决于Builder类,这一细节决定了两种模式之间的区别。产品通用接口在实践中,由混凝土建设者创建的产品具有明显不同的结构,因此如果没有理由派生不同的产品,则生成一个公共的父类。这也将生成器模式与抽象工厂模式区分开来,抽象工厂模式创建从公共类型派生的对象。

发件人:http://www.oodesign.com/builder-pattern.html