我想创建其类型由运行时数据确定的对象实例:
trait Business
case class Business1() extends Business
case class Business2() extends Business
object Business {
def fromData(data:Array[Byte]): Business = data(0) match {
case 1 => new Business1
case 2 => new Business2
case _ => throw new RuntimeException("data error")
}
}
上面的代码可以完成它的工作,但有一个问题是它被关闭了。每当我实现一个新的Business
子类时,我都必须修改Business.fromData
代码,例如
case 3 => new Business3
我如何定义Business.fromData
一次,以后可以添加Business3
,Business4
而不注册它?
编辑
我终于意识到这是一个完美的用例Multimethod
,即基于某个参数的函数进行调度。所以更普遍的问题应该是“如何在scala中做多方法”?我相信设计模式的存在只是因为语言无能,这就是为什么我不愿意接受基于工厂的答案。