我看过一个使用生成器设计模式的程序。
据我了解,构建器模式用于创建具有不同组件的整个对象。用于避免不可读的长参数列表。
例如,当我创建一个汽车对象时,我想要放入不同类型的引擎中。
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();
因此,构建器确定此“对象”应以哪种方式起作用。 我的问题是,我无法确定哪个方法可以调用其他方法,以及这是否是最好的方法。
在以这种方式实现的另一个项目中,我还没有看到这种模式。
答案 0 :(得分:1)
我认为它与Fluent接口类型搞混了。如果您引用GOF构建器模式,则必须为Builder接口提供具体的实现,在该接口中必须编写逻辑。我认为您可能不得不重新考虑Fluent界面。我在下面提供一些链接供您参考。如有效Java中所述,当您具有伸缩模式时,Fluent界面最适合。