Dopo averlo chiesto in stackoverflow: polymorphism-and-tree-structre
Sono giunto alla conclusione che non sono specifico e la mia domanda non riguarda una tecnologia specifica, quindi cercherò di riscriverla.
nella domanda StackOverflow ho scritto su una classe di nonni / genitori / figli
per fare in modo che la mia domanda sia concisa, questa volta sarò specifico:
Il mio vero dominio è il simulatore di armate / gioco di calcio
i modelli di dominio sono:
Corpo - > Divisione - > Brigata che forma una specie di struttura ad albero
un genitore della brigata deve essere una divisione, un genitore della divisione deve essere un corpo d'armata
un'unità senza genitore (tranne il corpo non è permesso)
inoltre, il gioco è diviso in giocatori di tre ruoli: generale di corpo, generale di divisione e generale di brigata, ogni giocatore deve selezionare la sua unità gestita in base al suo ruolo: il corpo generale seleziona un corpo ecc ..
L'interfaccia utente per la gestione delle unità è simile a un albero in cui aggiungi, elimini e modifichi le unità:
- coprs
- divisione
- birgade
- divisione
Nella mia domanda precedente la risposta che ho ottenuto è stata quella di modellarlo come
asbtact class Unit {
List<Unit> children;
Unit parent;
}
che significa che non tratto diversamente ogni tipo di unità Tuttavia, non si adatta abbastanza bene al mio gioco, dal momento che sembra difficile determinare il tipo di unità per stato (non ha per esempio il genitore == corps), consente situazioni in cui un genitore di brigate è un corpo che è non possibile. e non voglio che un generale di corpo sia in grado di selezionare una brigata da gestire solo perché in qualche modo non è stato assegnato un genitore e quindi il gioco pensa che sia un corpo. per essere più presagio, non voglio determinare il tipo di unità in base alla loro posizione nei tre, ma piuttosto il contrario, determinare la loro posizione in base al loro tipo.
Quindi la mia domanda è: come pensi che sia il modo migliore di modellarlo nelle classi? Ho pensato ad una classe di ogni tipo
interface Unit {
Unit getParent();
List<Unit> getChildren()
}
class Brigade implements Unit
class Divison implements Unit
class Corps implements Unit