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.