【发布时间】:2012-10-25 18:29:59
【问题描述】:
我需要一些关于如何构建作为 Builder 的流畅接口的建议,负责根据调用的方法返回不同的具体类型。
想象一下,我需要使用我的 ProductBuilder(流利地)创建以下类型之一:Product、ServiceProduct、PackagedProduct(都派生自 Product)。
我正在考虑使用这样的流利语法(非常欢迎其他建议):
创建产品:
var product = new ProductBuilder()
.Create("Simple product")
.WithPrice(12.5)
创建服务产品
var product = new ProductBuilder()
.Create("Service product")
.WithPrice(12.5)
.AsServiceProduct()
.ServiceProductSpecificMethods...()
然后 PackagedProduct 调用 AsPackagedProduct() 而不是 AsServiceProduct() 等。你明白了。
我还没有找到展示这方面最佳做法的示例。只有最终构建返回相同类型的样本。
有什么建议吗?
【问题讨论】:
-
你对这个接口有完整的要求吗?您是否正在寻求帮助将它们组织成流畅的界面?
-
建造者模式真正吸引你的是什么?您要解决什么问题?
-
@GlennFerrieLive:我想知道如何调用例如AsServiceProduct() “通知” ProductBuilder 上的 Build 方法以实际创建具有特定属性的 ServiceProduct 实例(由构建器上的后续方法调用提供,在 AsServiceProduct() 之后),而不是最简单形式的 Product。我可以在 AsServiceProduct 方法中设置一个私有属性,告诉构建器创建 ServiceProduct 而不是 Product,但我认为有比这更好的解决方案。
-
@32bitkid:在这个简单的案例中什么都没有。我正在研究设计这些界面的方法,以确定它是否对我们有用。
标签: c# fluent fluent-interface