Scenario:
-  Un feed di input di dati (chiama questo   
Source) -  Più oggetti (chiama questi   
Layer1) leggi questoSourcee analizza il feed. Questa analisi è stateful. - 
Gli oggetti   
Layer1hanno parametri di configurazione. Ad esempio,new FooLayer1(10, 20)eseguirà un'analisi diversa danew FooLayer1(20, 20)eseguirà un'analisi diversa danew FooLayer1(20, 30)-  L'analisi   
Layer1viene eseguita in modo asincrono. 
 -  L'analisi   
 -  Ancora altri oggetti (chiama questi   
Layer2) leggi solo l'output degli oggettiLayer1ed elabora quei risultati. Questa analisi è anche stateful. - Gerarchia di creazione di oggetti Guice
 -  Gli oggetti   
Layer1necessari sono accessibili abbastanza spesso da non avere importanza se vengono creati pigramente, a condizione che rimangano in memoria dopo che sono stati creati la prima volta. -  Le esigenze degli oggetti   
Layer2sono hardcoded; non è un buon modo per sapere in anticipo quali oggetti diLayer1saranno necessari. 
 Voglio poter riutilizzare il lavoro degli oggetti   Layer1   . Ad esempio, diciamo che ho: 
- 
   
AlphaLayer2oggetto che legge l'output diFooLayer1eBarLayer1 - 
   
BetaLayer2legge l'output diBarLayer1eBazLayer1 - 
   
QuuxLayer1è implementato, ma non voglio che il mio server calcoli il valore diQuuxLayer1a meno che non ci sia un oggettoLayer2che ne ha bisogno. 
 Attualmente, ho una factory a cui tutti gli oggetti   Layer2    hanno accesso, che crea solo l'oggetto   Layer1    appropriato, se necessario, e memorizza tutti gli oggetti   Layer1    creati in una mappa. Tuttavia, poiché gli oggetti   Layer1    hanno anche parametri di configurazione, devo assicurarmi di memorizzare gli oggetti   Layer1    in una buona struttura dati. Ma la funzionalità   Layer1    deve essere flessibile, e immagino che quando creerò più tipi di oggetti   Layer1   , questo tipo di   Map    potrebbe diventare davvero complicato. Sto facendo questa domanda perché, mentre ora va bene, mentre la complessità cresce, mantenere la struttura dei dati in questo modo sembra diventare davvero difficile. 
 Il tentativo di creare una sorta di struttura di dati% co_de nidificata dovrebbe ottenere il tempo di accesso   Map    alla ricerca di questi oggetti   O(1)   , ma renderà la cache estremamente complicata. In alternativa, potrei tenerli in una struttura più piatta e scorrere l'elenco di tutti gli oggetti   Layer1    e vedere se hanno i parametri corretti. Se nessuno trovato, crea il nuovo. Finché gli oggetti   Layer1    mantengono il riferimento, questo dovrebbe accadere solo una volta.
Un'altra opzione potrebbe essere creare un   Layer2    in modo che debba solo scorrere gli oggetti   Map<Class, Set<Layer1>>    creati della classe corretta. 
 Qualcuno ha mai visto questo tipo di scenario? Quale delle opzioni che ho menzionato è preferita? O c'è qualcosa che non ho ancora menzionato? Inoltre, c'è un modo per usare Guice per creare   Layer1    oggetti in un modo in cui posso riutilizzarli (cosa che devo fare, perché sono stateful)