Builder设计模式和Factory设计模式之间的区别是什么?
哪一种更有利?为什么?
如果我想测试和比较/对比这些模式,我如何将我的发现表示为图表?
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.
构建模式强调创建对象的复杂性(通过“步骤”解决)
抽象模式强调(多个但相关的)对象的“抽象”。
Factory模式几乎可以看作是Builder模式的简化版本。
在Factory模式中,工厂负责根据需要创建对象的各种子类型。
工厂方法的用户不需要知道该对象的确切子类型。工厂方法createCar的示例可能返回Ford或Honda类型的对象。
在生成器模式中,不同的子类型也由生成器方法创建,但同一子类中对象的组成可能不同。
要继续汽车示例,您可能需要一个createCarbuilder方法,该方法创建一个带有4缸发动机的Honda类型的对象,或者一个带有6缸的Honda型对象。构建器模式允许这种更精细的粒度。
生成器模式和工厂方法模式的图表都可以在维基百科上找到。
工厂模式允许您一次创建一个对象,而生成器模式允许您中断对象的创建过程。这样,您可以在创建对象期间添加不同的功能。