Ho bisogno di rappresentare un'astrazione su varie parti dell'hardware per un gioco. Sto cercando di disaccoppiare il codice che fa cose come gestire la logica del gioco dal codice che è specifico per API / piattaforma o brutto dettaglio di implementazione.
In questo modo:
std::unique_ptr<IDevice> device(CreateDevice());
IGraphicsDevice *graphics = device->getGraphicsDevice();
ISoundDevice *sound = device->getSoundDevice();
IWindow *window = device->getWindow();
IJobManager *jobmanager = device->getJobManager();
//etc
Una soluzione che ho visto era semplicemente mettere tutto questo come globale e inizializzarle in main
, ma vorrei evitarlo se posso perché non mi piace davvero trattare con i globali (e io trovarli "brutti", per la mancanza di una parola migliore). Inoltre, non posso consentire più di un'istanza perché richiede l'inizializzazione delle librerie che sono inizializzate a livello globale.
Quali alternative al modello singleton ci sono per questo?
So che più di un'istanza potrebbe portare a errori, si tratta di una cattiva decisione di progettazione? Posso fare qualcosa di diverso?