Хоча цей підхід насправді не потрібен для чогось такого простого, як шахова дошка, коли я думаю про елегантний спосіб зробити щось, що стосується виду, я хочу зробити якомога простіше змінити винесений вигляд. Наприклад, припустимо, що ви вирішили, що хочете чергувати чорно-біле в кожному рядку, але не в кожному стовпчику. Однокласники, які використовувались у відповідях до цих пір, доведеться переписати.
Якби я пішов так далеко, як міг із цим, і полегшив переробку шаблону на шаховій дошці, ось що я б робив:
1) Я зробив би файл, який вказує, якого кольору має кожен квадрат у шаховій дошці.
Наприклад, я міг би створити файл, chess_board_pattern.config
який виглядає приблизно так:
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
2) Я б написав клас / компонент / все, що може прочитати цей файл, і створити якийсь об'єкт, який представляє шаблон дошки:
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) Я б тоді використовував цей клас у функції, яка фактично малює дошку.
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]);
}
}
Знову ж таки, це набагато важче, ніж це потрібно для шахової дошки. Я думаю, що в цілому, працюючи над більш складними проектами, краще придумати узагальнені рішення, як це замість написання коду, який важко змінити згодом.