Modellazione della struttura ad albero complessa

1

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

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
    
posta Amit Mizrahi 06.08.2016 - 19:14
fonte

1 risposta

1

In base alla tua descrizione, il modello più semplice (in termini di pura struttura) sarebbe qualcosa del tipo:

class Corps {
    final List<Division> children;
}

class Division {
    final Corps parent;
    final List<Brigade> children;
}

class Brigade {
    final Division parent;
}
    
risposta data 31.08.2016 - 17:01
fonte