HashMap per sostituire Singletons?

1

Considera quanto segue: I controller e le viste sono presenti in un'applicazione client. Poiché viene eseguito esclusivamente sul lato client, ogni controller deve esistere solo una volta.

All'inizio pensavo di implementare tutto come Singletons, ma questo non mi sembra giusto per alcune ragioni.

Alcuni sono istanziati in questo modo:

abstract class View(controller: Controller)

ora in ogni vista faccio determinate cose, in base al controller che ho ottenuto.

Alcuni controller devono avere parametri impostati al momento dell'inizializzazione, questo parla di una classe, piuttosto che di un singolo. (Certo che potrei fare: MyObject.set (qualunque cosa) ma non è né pulito né bello)

Ora la mia idea era di creare una semplice HashMap mutabile per i controller e memorizzare le classi come chiavi e esattamente un oggetto corrispondente come valore.

Ora, dopo ogni inizializzazione, controllo HashMap per un'istanza e, se ce n'è già una, la restituisco.

Sembra hacky però.

Ovviamente potrei semplicemente seguire le lezioni fino in fondo, ma non sono sicuro che sia un buon modo. Voglio dire, se istanzio nuovi Controllori ogni pochi secondi ... (È un gioco di cui stiamo parlando, quindi ci sono già molti calcoli in corso)

    
posta Sorona 18.07.2015 - 12:55
fonte

1 risposta

4

Ad un livello elevato, stai essenzialmente chiedendo:

La creazione di una cache di controller è migliore rispetto all'utilizzo di singleton?

Direi che nella tua situazione, sì, lo è. Ed ecco perché.

Dalla tua descrizione non sembra che tu abbia bisogno della semantica di un singleton qui. Il tuo gioco andrebbe benissimo se tu avessi istanziato un nuovo controller ogni volta che ne avevi bisogno.

In altre parole, il tuo requisito non è: Tutti i riferimenti a un controller devono essere risolti in un unico stato di controller unico. "

Al contrario, il tuo requisito sembra essere: Quando recuperi un'istanza di Controller, dovrebbe essere veloce.

Questo è un argomento per l'utilizzo di una cache. Non singleton.

Se vuoi implementare quella cache usando una HashMap, prova a:)

    
risposta data 18.07.2015 - 13:11
fonte