Sto lavorando a un semplice sistema di interfaccia utente per un gioco. Gli elementi costitutivi sono oggetti Widget , che possono contenerli a vicenda. Esistono diverse sottoclassi di Widget , ad es. LabelWidget , ImageWidget e ButtonWidget .
Poiché la nidificazione è possibile, un ButtonWidget non è altro che un contenitore per LabelWidget e ImageWidget . Sono abbastanza contento di questo.
Il problema è: ora ho bisogno di usare un AssetLoader per caricare le immagini, non le posso ottenere direttamente dal disco. Esistono più implementazioni di AssetLoader , una per ogni piattaforma su cui è in esecuzione il gioco e solo una istanza viene creata in anticipo. E ha stato.
Quindi ora ho bisogno di passare un oggetto AssetLoader in ImageWidget . E in ButtonWidget , poiché contiene ImageWidget . E così via. Ho aggiornato il codice e ora ho bisogno di passare un asset loader in quasi tutti i widget, e davvero non mi piace quello che vedo.
Ho studiato alcune basi di codice dei framework UI che mi piacciono e ho notato che Android ha qualcosa di simile: C'è un oggetto Context che viene passato in ogni vista, che può essere usato per caricare risorse. Ma dal momento che le viste di solito sono istanziate magicamente da XML, non è così fastidioso da usare come quello che ho.
Posso pensare a una sola via d'uscita: crea un singleton che non fa altro che offrire un riferimento al patore di risorse, ad es. %codice%. Ma non sono convinto che questo non sia in realtà peggiore di quello che ho.
Riesci a pensare a qualsiasi soluzione elegante e remota per questo? Si noti che l'utilizzo di un framework per le dipendenze non è un'opzione per me.