在Java中创建嵌套的流畅API

时间:2015-03-20 05:28:18

标签: java design-patterns builder

我们正在尝试为嵌套的Object提供流畅的API。 考虑我们有以下三个类

属性:     name:String     值:对象

项目:     action:String     属性:

订单:     action:String     属性:     项目:

这里我们希望有一个流畅的API,可以帮助构建上面的对象。

现在我们需要拥有如下构建器:

属性构建器

AttributeBuilder.make().name().value().build();

项目构建器

ItemBuilder.make().action()
                   .attribute()
                               .name().value().build()
                   .attribute()
                               .name().value().build()
                    .build();

订单生成器

OrderBuilder.make().action()
                   .attribute()
                               .name().value().build()
                   .attribute()
                               .name().value().build()
                   .item()
                          .action()
                          .attribute()
                                      .name().value().build()
                          .attribute()
                                     .name().value().build()
                          .build()
                    .build();

我们稍后可能会将Order对象嵌套在其他对象中。

那么有没有办法实现这种嵌套的DSL构建?

1 个答案:

答案 0 :(得分:1)

哇,那是很多Builders。您确定需要像这样构建层次结构的每个细节吗?

查看代码,我们可以看到实体形成了树状层次结构。订单包含物品,物品具有属性。如果实体真的很简单,你可以构建层次结构而不使用Builders。请参阅示例here

为了流畅地处理订单,您可以使用Composite模式。例如,如果您需要根据项目和属性计算订单的价格。或者从仓库saldo中减去订购的商品和属性。