Sebbene questo approccio non sia realmente necessario per qualcosa di semplice come una scacchiera, quando penso a un modo elegante per rendere qualcosa legato alla vista, voglio rendere il più semplice possibile cambiare la vista renderizzata possibile. Ad esempio, supponiamo che tu abbia deciso di voler alternare il bianco e il nero su ogni riga, ma non su ogni colonna. Le linee di risposta utilizzate finora nelle risposte dovrebbero essere riscritte.
Se dovessi andare il più lontano possibile con questo e rendere più facile riprogettare il modello sulla scacchiera, ecco cosa farei:
1) Vorrei creare un file che indichi di che colore è ogni quadrato nella scacchiera.
Ad esempio, potrei creare un file chess_board_pattern.config
simile a questo:
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
2) Scriverei una classe / componente / qualunque cosa sia in grado di leggere questo file e creare un tipo di oggetto che rappresenti lo schema della scheda:
public class BoardPattern {
private Color[][] pattern;
public BoardPattern(File patternFile)
{
pattern = new Color[8][8];
//Parse the file and fill in the values of pattern
}
public Color[][] getPattern {
return pattern;
}
}
3) Vorrei quindi utilizzare quella classe nella funzione che effettivamente disegna il tabellone.
File patternFile = new File("chess_board_pattern.ini");
Color[][] pattern = new BoardPattern(patternFile).getPattern();
ChessBoardDrawable chessBoard = new ChessBoardDrawable();
for(int row = 0; row < 8; row++) {
for(int column; column < 8; column++) {
chessBoard.drawSquare(row, column, Color[row][column]);
}
}
Ancora una volta, questo è molto più difficile di quanto sia necessario per una scacchiera. Penso in generale, tuttavia, quando si lavora su progetti più complicati, è meglio trovare soluzioni generalizzate come questa invece di scrivere codice che è difficile cambiare in seguito.