この一般的なシナリオのデザインパターンを選択したいと思います。
メッセージを受信するモジュール(MessageListener)があります。受信する各メッセージは実際にはオブジェクトです(MyMessage1、MyMessage2、..)
My_Message1、My_Message2はMy_Message_Abstractを拡張します。
これで、MessageListener Object(onMessage(..))によって取得されるメッセージが、メッセージインスタンスに依存する異なる「コマンド」を実行したい場合は、次のようになります。
onMessage(My_Message_Abstract msg)
{
if (msg instance of My_Message1)
{
doSomething()..
}
else if(msg instance of My_Message2)
{
doSomethingElse()..
}
}
私はこのボイラーをif/thenコードで取り除き、将来のメンテナンス/動的/プラグアビリティ/きちんとした方法でそれを改善したいと思っています。
そこで、コマンドデザインパターンを採用しました。そして、私はそのようなものを持つことができることを知りました:
メッセージリスナーでマップを作成するには:
Map<Integer, MessageCommand> messageCommandsMap = new HashMap<Integer, MessageCommand>();
..
sessionTargetMap.put(MSG_1_TYPE, new Message1Command());
sessionTargetMap.put(MSG_2_TYPE, new Message2Command());
(Message1Command,Message2Command implements from Command interface)
onMessage(My_Message_Abstract msg)
{
messageCommandsMap.get(msg.getType).executeCommand(msg);
}
私はこのようにMessageListeenrのハッシュマップのアイデアが気に入らなかったので、すべてのコマンドをそのオブジェクト(MessageListener)に結合しています。
このスレッドで提供される解決策として: Javaのifステートメントの長いリスト
どうすればこれを改善できますか?Mybeこのアイデアには他のパターンを使用する必要がありますか?
ありがとう、