Estoy tratando de comprender el patrón de diseño más adecuado (Java) para procesar una serie de mensajes. Cada mensaje incluye un "tipo" que determina cómo deben procesarse los datos contenidos en el mensaje.Patrón de diseño para procesar eventos
He estado considerando el patrón Command, pero me cuesta entender las funciones/relevancia de las clases de comando específicas. Hasta ahora, he determinado que el receptor contendrá el código que implementa los métodos de procesamiento de mensajes. Los comandos concretos se instanciarían en función del tipo de mensaje. Sin embargo, no tengo idea de cómo se deben pasar los datos reales del mensaje. ¿Debería pasarse al constructor del receptor con los métodos de receptor apropiados que son invocados por el método de ejecución de comando concreto? ¿Quizás los datos del mensaje se deben pasar en las invocaciones del método de acción del receptor?
Soy bastante nuevo en todo esto por lo que cualquier orientación sería apreciada.
Esto puede ayudar:
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;
}
}
Solo una pequeña nota al margen. Nunca use el operador para igualdad (==) para comparar cadenas. Dependiendo de la implementación de jvm, "hello" == "hello" podría ser falso. Esto se debe a que == operador usa identidad de objeto, lo que significa que solo es verdadero si ambos objetos son idénticos. "hola" == "hola" en realidad podría construir dos objetos de cadena -> no idénticos.Use el método equals() en su lugar – bennidi
@bennidi: Gracias por esto. He editado el ejemplo y he comprobado el código original :) – skyman