Sto cercando di creare un gioco da tavolo astratto. Nel gioco, un giocatore può scegliere di compiere più azioni in un turno, come posizionare, spostare o ruotare un pezzo. Non sono sicuro se la mia implementazione sia negativa o meno. Mi è stato detto dal mio professore che usare instanceof e se affermazioni come questa sono un segno di odore di codice, ma non riesco a pensare a nessun altro modo di implementarlo.
La mia attuale motivazione per implementare il gioco in questo modo è quella di essere in grado di ordinare dinamicamente le diverse azioni in un elenco in modo che la scacchiera possa eseguire le azioni. Tuttavia, ogni azione è diversa e deve essere eseguita in modo diverso. Quindi, dal momento che devo essere in grado di elencare ogni azione in qualsiasi ordine ed eseguire ogni azione, questo era il modo migliore a cui potessi pensare.
public class Board {
private Square[][] squares;
public void execute(List<Action> actions) {
for (Action action : actions) {
if (action instanceof MovingAction) {
//
} else if (action instanceof RotatingAction) {
//
}
}
}
}
public interface Action {
}
public class MovingAction implements Action {
private Position positionOfPiece;
private Position targetPosition;
public Position getPositionOfPiece() {
return positionOfPiece;
}
public Position getTargetPosition() {
return targetPosition;
}
public MovingAction(Position positionOfPiece, Position targetPosition) {
this.positionOfPiece = positionOfPiece;
this.targetPosition = targetPosition;
}
}
public class RotationAction implements Action {
private Position positionOfPiece;
private Orientation orientation;
public RotationAction(Position positionOfPiece, Orientation orientation) {
this.positionOfPiece = positionOfPiece;
this.orientation = orientation;
}
public Position getPositionOfPiece() {
return positionOfPiece;
}
public Orientation getOrientation() {
return orientation;
}
}
Quindi c'è un modo migliore per implementarlo o è questo il modo migliore per farlo?