一連のメッセージを処理するのに最適な(Java)デザインパターンを理解しようとしています。各メッセージには、メッセージに含まれるデータの処理方法を決定する「タイプ」が含まれています。イベントを処理するデザインパターン
私はCommandパターンを検討していましたが、特定のCommandクラスの役割/関連性を理解するのは苦労しています。これまでは、受信者にメッセージ処理メソッドを実装するコードが含まれると判断しました。具体的なコマンドは、メッセージタイプに基づいてインスタンス化されます。しかし、私はどのように実際のメッセージデータを渡す必要があるか分かりません。具体的なコマンドのexecuteメソッドによって呼び出される適切な受信側メソッドを使用して、受信側コンストラクタに渡す必要がありますか?おそらくメッセージデータは受信側のアクションメソッドの呼び出しで渡されるべきでしょうか?
私はこのすべてにかなり新しいので、どんな指針も認められます。
これが役立つことがあります。
public interface Command {
public void execute(String msg);
}
public class AO1Command implements Command {
Receiver rec = new Receiver();
public void execute(String msg) {
rec.admit(msg);
}
}
public class CommandFactory {
public protected CommandFactory() { }
public static Command getInstance(String type) {
if (type.equals("A01")) return new A01Command();
else if (type.equals("A02")) return new A02Command();
else {
return null;
}
}
ちょっとしたメモです。文字列を比較するために、演算子を等価(==)に使用しないでください。 jvmの実装に応じて、 "hello" == "hello"はfalseと評価されるかもしれません。これは、==演算子がオブジェクトIDを使用するのは、両方のオブジェクトが同一である場合にのみ真であることを意味するためです。 "hello" == "hello"は実際には2つの文字列オブジェクトを構築するかもしれません - >同じではありません。代わりにequals()メソッドを使用してください – bennidi
@bennidi:ありがとうございます。私は例を編集して - 元のコードをチェックしました:) – skyman