Quale opzione per l'inizializzazione / design della classe

2

Ho una classe Game .

Questa classe deve prendere tre argomenti passati nel suo costruttore:

  1. Elenco dei pezzi di gioco
  2. Dimensioni scheda
  3. Posizionamento del pezzo di gioco 'motore'

Sto vagando per il design del motore di posizionamento dei pezzi del gioco. Questo oggetto ha bisogno dell'elenco di pezzi di gioco e delle dimensioni della tavola per determinare dove posizionare i pezzi.

Le opzioni che posso vedere sono:

  1. Il motore di posizionamento prende l'elenco dei pezzi e le dimensioni della scheda nel suo costruttore e ha un metodo di generazione che restituisce l'elenco dei pezzi e il loro posizionamento
  2. Simile a 1 ma l'elenco di pezzi e dimensioni della scheda vengono impostati come proprietà dopo l'istanziazione e quindi c'è il metodo Genera come sopra.
  3. Il motore di posizionamento prende la dimensione della scheda come argomento del costruttore o imposta come una proprietà e poi c'è un metodo Genera che prende un pezzo come parametro e quindi restituisce il posizionamento per quel pezzo.

Sto cominciando a oscillare verso la terza opzione in quanto ciò consente al gioco di gestire le cose, altrimenti il gioco potrebbe avere una lista di pezzi e una dimensione della tavola diversa dal "motore" di piazzamento. Anche generare la posizione di partenza per un pezzo alla volta sembra più "corretto".

Come faresti?

    
posta James Culshaw 07.08.2016 - 15:28
fonte

1 risposta

2

Mi piace l'opzione 1.

Pseudocodice:

public class Game {
    public Game(PiecePlacementEngine ppe){}
}

public class Piece {

}

public class PieceNotInListException extends Exception {

}

public abstract class PiecePlacementEngine {
    public PiecePlacementEngine(List<Piece> pieces, int boardsize[]){}  
    public abstract Map<Piece,int[]> getAllPlacements();
    public abstract int[] getPlacement(Piece p) throws PieceNotInListException;
    public abstract int[] getBoardSize();
    public abstract List<Piece> getPieces();
}
  • Non è necessario passare tre parametri al costruttore di Game poiché tali informazioni sono in PiecePlacementEngine
  • Ho dato per scontato che il boardize sia un array di ints, ma che potrebbe essere cambiato.
  • Ho creato PiecePlacementEngine abstract nel mio esempio per non assumere troppe cose e compilare. Ma non devi necessariamente estendere questo esempio, basta rimuovere il modificatore astratto e aggiungere corpi ai metodi.
  • PiecePlacementEngine ha getter per i suoi parametri di costruzione boardize e lista di pezzi in modo che Game possa accedervi se necessario.
  • PiecePlacementEngine ha getter per l'intero elenco di coppie chiave / valore di posizionamento e posizionamento o solo per il posizionamento di un singolo pezzo.
  • Viene generata un'eccezione se chiedi la posizione di un pezzo che thar non è nella lista.
  • Suggerisco che se un pezzo esiste nell'elenco ma non è posizionato sul tabellone, allora chiedendo il suo posto restituisce null.
risposta data 07.08.2016 - 17:00
fonte

Leggi altre domande sui tag