Devo usare il design "dinamico" per singleton?

1

Abbiamo creato un semplice gioco 2D, contiene campi ed elementi, il giocatore può spostare gli elementi. Il gioco ha due viste: una grafica (con immagini) e una testuale (stampata sulla console). Ma solo uno alla volta, e la logica del gioco non deve conoscere la vista effettiva.

Per risolvere questo problema, ho creato un'interfaccia di fabbrica. Al momento dell'avvio, una classe che implementa questa interfaccia (GUI o fabbrica CMD) viene creata e archiviata nella classe principale. Ora posso creare viste, ma i modelli non devono saperlo. Perfetto.

Tuttavia, ho notato che devo chiamare MysteryWindow.blah().blah().getActualViewFactory() ogni volta, ma se guardiamo la fabbrica come una scatola nera (e i modelli del gioco devono fare), non è realmente un'istanza / proprietà ma una specie di singleton. Quindi potrei fare un refactoring:

public class ViewFactory {
    private static ViewFactoryImpl instance;
    public void setup() { if (someConfig) instance = new GUIViewFactory(); }
    public static View createXXField(XX field) { instance.createXXField(field); }
    public static View createXXElement(XX element) {  instance.createXXElement(field); }
}

L'esempio è piuttosto banale e non vale la pena di ristrutturare l'intero progetto ora, ma mi piacerebbe sapere che questo tipo di design è buono? Se no, perché? Potremmo chiamare questa nuova classe un singleton se la sua operazione può variare (tra due sessioni)?

    
posta klenium 12.04.2018 - 15:56
fonte

1 risposta

2

La cosa essenziale di Singleton è che c'è una chiamata che restituirà la stessa istanza ogni volta, il che assicura che l'istanza sia disponibile alla prima chiamata e che si assicuri che l'istanza rimanga disponibile per tutta l'esecuzione del programma. Finché fornisci questo, stai bene.

Non è richiesto che Singleton appartenga alla stessa classe ad ogni esecuzione, o si comporta allo stesso modo in ogni esecuzione, purché si comporti secondo la sua interfaccia.

Sarebbe preferibile che non ci fosse una funzione pubblica di "setup", dal momento che dovresti essere in grado di usare il Singleton in qualsiasi momento, non limitato a un tempo dopo l'inizializzazione.

    
risposta data 12.04.2018 - 16:09
fonte

Leggi altre domande sui tag