Хотя этот подход на самом деле не нужен для чего-то такого простого, как шахматная доска, когда я думаю об элегантном способе рендеринга чего-либо, связанного с представлением, я хочу максимально упростить изменение отображаемого представления. Например, предположим, вы решили, что хотите чередовать чёрное и белое в каждом ряду, но не в каждом столбце. Однострочники, используемые в ответах, должны быть переписаны.
Если бы мне нужно было пойти с этим как можно дальше и сделать так, чтобы дизайн шаблона на шахматной доске был как можно проще, вот что я бы сделал:
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]);
}
}
Опять же, это намного сложнее, чем необходимо для шахматной доски. В целом, я думаю, что при работе над более сложными проектами лучше придумать такие обобщенные решения, чем писать код, который потом сложно изменить.