タグ付けされたクラスと大きな if-else ブロックまたは switch ステートメントの使用を避け、代わりにクラス階層でポリモーフィズムを使用したいと考えています。これはより良い方法だと思います。
たとえば、実行されるメソッドの選択が Actor タイプのオブジェクトの 1 つのフィールドのみに依存する以下のようなものです。
switch(actor.getTagField())
{
case 1: actor.act1(); break;
case 2: actor.act2(); break;
[...]
}
になるだろう
actor.act();
act メソッドは Actor のサブクラスでオーバーライドされます。
ただし、どのサブクラスをインスタンス化するかを実行時に決定する最も明白な方法は、元のものと非常によく似ています。
Actor newActor(int type)
{
switch(type)
{
case 1: return new Actor1();
case 2: return new Actor2();
[...]
}
}
そのため、実際には何も得られていないようです。ロジックは移動されたばかりです。
これを行うためのより良い方法は何ですか? 私が思いつく唯一の方法は、Actor の各サブクラスのファクトリ クラスを実装することですが、これは、このような単純な問題ではかなり面倒に思えます。
私はこれを考えすぎていますか?他の場所でほとんど同じことをするだけでは、元の変更を行う意味がないように思えます。