Motivo di progettazione: matrice statica / elenco nell'oggetto di classe

0

Sono un alunni CS, ma non abbiamo imparato molto a proposito di OOP o Design Patterns. Ho sentito la frase C con iostreams e ho pensato che si adattasse. Comunque questo è oltre il punto. Sono solo curioso di sapere che cosa percepire sarebbe un modello di disegno molto semplice.

Qualcuno di voi ha giocato a Starcraft? Sai come puoi selezionare / deselezionare le unità? Torna a quello in un secondo. Supponiamo che abbia una classe Unit e volevo che tenesse traccia di tutte le unità selezionate. Mi è venuta l'idea di creare una lista / arrray statica all'interno della classe Unit e le unità stesse potevano aggiungerle o rimuoverle dall'array mentre erano selezionate / deselezionate.

Questo è solo un esempio, potrebbero esserci altre applicazioni di questo "modello". Supponiamo che tu voglia mantenere un elenco di "schede" visibili in un browser web o w / e, potresti avere loro aggiungere un riferimento a se stessi in una matrice statica nella classe.

L'idea è che puoi semplicemente chiamare Unit.GetSelected () e ottenere un puntatore / riferimento a tutte le unità / tab "selezionate" o "aperte". Sono consapevole che ci sono altri modi forse migliori per risolvere questi problemi, ma questo è anche oltre il punto. Come si chiamerebbe questo modello?

    
posta user142504 13.07.2014 - 05:17
fonte

1 risposta

3

Questo anti-pattern dovrebbe essere nominato come preferisci. Non sono sicuro di averlo visto nominare prima, anche se raccomanderei vivamente di non sentirmi intimo. Ho visto questo nei giochi occasionalmente quando qualcuno pensa che sia una buona idea avere una lista globale di "tutte le unità nel gioco". Anche se è una buona idea, questa non dovrebbe essere la responsabilità dell'unità - è responsabilità del gioco.

Per il tuo esempio, solo l'interfaccia utente dovrebbe conoscere o preoccuparsi di ciò che è selezionato. I tuoi oggetti di gioco certamente non dovrebbero.

In un senso più generale, avere una statica di cui un tipo è a conoscenza tende ad essere un accoppiamento stretto, rendendo il codice rigido, difficile da testare e difficile da usare contemporaneamente.

    
risposta data 13.07.2014 - 06:04
fonte

Leggi altre domande sui tag