构建器模式内部的业务逻辑

时间:2019-09-03 07:58:32

标签: java design-patterns builder

我看过一个使用生成器设计模式的程序。

据我了解,构建器模式用于创建具有不同组件的整个对象。用于避免不可读的长参数列表。

例如,当我创建一个汽车对象时,我想要放入不同类型的引擎中。

CarBuilder.addEngine(new dieselEngine).build();

在汽车级和发动机级中实现了汽车和发动机的行为。

但是现在我看到了builder用来改变对象的逻辑,例如:

CarBuilder.addEngine(new dieselEngine.addStartStopSystem().addCatalysis()).build();

您构建了非常大的builders,在其中必须使用更改整个构建对象行为的方法。 构建器变得非常庞大,当我希望此对象具有某种行为时,我不知道该调用哪种方法。

我的意见是,您不应在这些构建器中使用任何逻辑。 我将创建一个对象,该对象扩展主对象并更改其行为并将其移交给构建器。

您对此有何看法?应该以这种方式使用建筑商吗?

----------------------- UPDATE -------------------- -----

也许我的榜样选择不当。 我将使用一个更抽象的示例 在这个构建器中,我看到了类似的构造:

Object.output("First print output").Condition(is,String).onElse("Second print output").build();

因此,构建器确定此“对象”应以哪种方式起作用。 我的问题是,我无法确定哪个方法可以调用其他方法,以及这是否是最好的方法。

在以这种方式实现的另一个项目中,我还没有看到这种模式。

1 个答案:

答案 0 :(得分:1)

我认为它与Fluent接口类型搞混了。如果您引用GOF构建器模式,则必须为Builder接口提供具体的实现,在该接口中必须编写逻辑。我认为您可能不得不重新考虑Fluent界面。我在下面提供一些链接供您参考。如有效Java中所述,当您具有伸缩模式时,Fluent界面最适合。

https://en.wikipedia.org/wiki/Fluent_interface

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

相关问题