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)?