Estoy haciendo un juego simple y he decidido intentar implementar un sistema de mensajería.
El sistema básicamente se ve así:
La entidad genera el mensaje -> el mensaje se publica en la cola de mensajes global -> messageManager notifica a cada objeto del nuevo mensaje a través de onMessageReceived (Message msg) -> si el objeto lo desea, actúa sobre el mensaje.
La forma en que estoy creando objetos de mensaje es así:
//base message class, never actually instantiated
abstract class Message{
Entity sender;
}
PlayerDiedMessage extends Message{
int livesLeft;
}
Ahora mi SoundManagerEntity puede hacer algo como esto en su método onMessageReceived ()
public void messageReceived(Message msg){
if(msg instanceof PlayerDiedMessage){
PlayerDiedMessage diedMessage = (PlayerDiedMessage) msg;
if(diedMessage.livesLeft == 0)
playSound(SOUND_DEATH);
}
}
Los pros de este enfoque:
- Muy simple y fácil de implementar.
- El mensaje puede contener tanta información como desee, ya que puede crear una nueva subclase de mensaje que tenga la información necesaria.
Los contras:
- No puedo entender cómo puedo reciclar los objetos de mensaje a un grupo de objetos , a menos que tenga un grupo diferente para cada subclase de mensaje. Así que tengo mucha, mucha creación de objetos / asignación de memoria con el tiempo.
- No puedo enviar un mensaje a un destinatario específico, pero aún no lo he necesitado en mi juego, así que no me importa demasiado.
¿Que me estoy perdiendo aqui? Debe haber una mejor implementación o alguna idea que me falta.