Chociaż takie podejście nie jest tak naprawdę konieczne w przypadku czegoś tak prostego jak szachownica, gdy myślę o eleganckim sposobie renderowania czegoś związanego z widokiem, chcę maksymalnie ułatwić zmianę renderowanego widoku. Załóżmy na przykład, że zdecydowałeś, że chcesz naprzemiennie czarno-biały w każdym rzędzie, ale nie w każdej kolumnie. Jednowierszowe używane do tej pory odpowiedzi musiałyby zostać przepisane.
Jeśli miałbym posunąć się tak daleko, jak to tylko możliwe, i maksymalnie ułatwić przeprojektowanie wzoru na szachownicy, oto co bym zrobił:
1) Zrobiłbym plik wskazujący, jaki kolor ma każdy kwadrat na szachownicy.
Na przykład mogę utworzyć plik, chess_board_pattern.config
który wygląda mniej więcej tak:
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
bwbwbwbw
wbwbwbwb
2) Napisałbym klasę / komponent / cokolwiek, co może odczytać ten plik i stworzyć jakiś obiekt reprezentujący wzorzec płytki:
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) Użyłbym tej klasy w funkcji, która faktycznie rysuje planszę.
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]);
}
}
Ponownie, jest to o wiele trudniejsze niż jest to konieczne dla szachownicy. Myślę jednak ogólnie, że pracując nad bardziej skomplikowanymi projektami, najlepiej jest wymyślić takie ogólne rozwiązania zamiast pisać kod, który później trudno zmienić.