タイプがランタイム データによって決定されるオブジェクト インスタンスを作成したい:
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 で multimethod を実行する方法」である必要があります。私は、デザインパターンは言語能力がないためにのみ存在すると信じています。そのため、工場ベースの回答を受け入れることに消極的です。