case vs方法构建器,使用命名的默认参数

时间:2011-05-03 22:27:03

标签: scala builder factory-pattern

我准备使用带有命名默认参数的case类作为构建器。举个简单的例子:

case class Person(name:String)
case class PersonBob(name:String = "Bob") {
   def build = Person(name)
}
val casePerson = PersonBob("case").build

但我也可以使用方法:

object Builder {
  def personBob(name:String = "Bob"):Person = Person(name)
}
val methodPerson = Builder.personBob("method")

一些权衡:

  • 方法方法消除了为每个构建器创建对象的需要......节省了周期和内存。
  • 方法方法有一些更精简的实现代码。使用语法没有优势。
  • 无法将方法作为参数传递给“构建器组合”的其他构建器。函数可以,但我们在这里讨论方法,因为函数不支持参数默认值。
  • 案例类方法允许我持久化构建器实例(现在不需要)。
  • 案例类方法有助于在某些时候构建内部DSL - 但我认为外部DSL对于任何一种方法都是矛盾的。

其他考虑因素?用其他方式建立一个更好的建设者?

1 个答案:

答案 0 :(得分:0)

困惑我:不是这里所有你需要的烤箱工厂,或者我错过了什么。 IOW:

scala> case class Foo(bar:String="ab")
defined class Foo

scala> val f = Foo()
f: Foo = Foo(ab)

scala> f.bar
res2: String = ab
相关问题