生成器模式与结构作为参数

时间:2013-11-07 19:39:43

标签: design-patterns architecture builder

如果一个类在构造函数中有太多参数,我们可以使用结构或构建器模式。

哪个更好?有没有好的做法?

2 个答案:

答案 0 :(得分:0)

这取决于参数是什么以及它们之间的关系以及需要多少与可选项相比。

如果有几个参数相关,通常最好创建一个单独的类(或结构)来存储这些参数。

例如,而不是

TransferMoney(long srcAccountNumber, int srcAmount, Currency srcCurrency, long destAccountNumber)

我们可以看到src ammount和srcCurrency是相关的,我们可以创建一个新类来处理各种金额(并可能添加转换为其他货币的方法等)并减少参数数量:

TransferMoney(long srcAccountNumber, Money amount, long destAccountNumber)

这个问题与语言无关,但如果您的语言不支持默认值(如Java),那么您可能需要使用不同数量和类型的参数的多个重载方法来适应所有可能的组合。如果有很多组合,那么构建器是一种更清洁的方式。

答案 1 :(得分:0)

使用具有满足您需求的结构的类。 Martin Fowler有一种名为DataTransferObject (DTO)的类似技术,您可以在其中传递对象模型,而不是使用多次调用(可能是数据库调用)检索数据,从而降低成本。

构建器模式的好处:

  1. 类结构没有额外的逻辑,意味着它更容易阅读(逻辑更少)
  2. 不要创建constructor doing real works代码气味,再次使代码更容易阅读
  3. 操作很便宜,因为您只是传递引用而不是创建一个全新的对象。特别是当数据结构很大时。
  4. 缺点:对象处于可变状态。