Più sistemi di primo livello che comunicano tra loro tramite messaggi (eventi / comandi).
La classe Main del programma avvolge tutti i sistemi e ha un componente di distribuzione messaggi che consegna messaggi da un sistema a un altro. Ogni sistema contiene molti oggetti che devono comunicare tra loro, tuttavia questi messaggi non riguardano necessariamente altri sistemi.
La mia attuale implementazione è la seguente: ogni listener registrato ha un oggetto (hashmap) "subscribedEvents" con callback per gli eventi interessati (messaggi), ma per evitare che gli oggetti interni di un sistema inviino i loro messaggi attraverso il dispacher principale essi avrebbe un dispaccio personale. Il problema che ho con questo approccio è come identificare ogni dispatcher, dal momento che gli oggetti interni devono essere ancora in grado di ascoltare i messaggi di livello superiore e l'oggetto "subscribedEvents" dovrebbe diventare
subscribedEvents[dispacherId].eventCallback
Quale sarebbe il modo corretto di aggiungere identificatori ai dispatcher? Un dispatcher è solo un componente di una classe (sistema o oggetto interno) e ciascun dispatcher non è a conoscenza degli altri. Posso solo pensare ad una fabbrica di eventDispatcher singleton, ma non mi sembra una soluzione molto elegante.
PS: sono aperto a un approccio completamente nuovo e completamente diverso per affrontare la comunicazione, questo è proprio quello che mi è venuto in mente.