案例对象可以作为一个州

时间:2014-03-28 14:05:29

标签: scala design-patterns state

我目前的项目是使用Java。我们将业务逻辑推送到代表特定状态(新的,已注册的等)的枚举。在scala中,我只是想知道使用case对象作为状态是一个好主意吗?有什么缺点。

一个简单的例子

trait State {
   def read() : Try[String] = {
  Failure(new IllegalStateException("too young to read"))
}
}
case object child extends State

case object young extends State {
  override def read() : Try[String] = {
    Success("young people read book")
  }
}
case object elder extends State {
  override def read() : Try[String] = {
    Success("elder people read book")
  }
}

class Person(state : State) {

   def read() : Try[String] = {
      state.read()
   }
}

1 个答案:

答案 0 :(得分:5)

它可以并且实际上它是非常常见的模式(顺便提到密封特性),但是实现我见过通常会将任何操作移出状态并使用{{1} }作为表示当前状态的标签,以及可能存储某些状态数据的案例类:

case objects

使用案例类来存储数据(而不是将其存储在普通的旧类字段中)的推理是,不同的状态可能具有不同的变量集,而使用案例类则更容易理解当前的工作集