Я реализую базовую настольную игру на Java, и мне трудно определить плюсы и минусы решения. Я уже успешно использую паттерн команд, чтобы включить функцию отмены в игре, и изначально намеревался реализовать сохранение/загрузку игры путем сериализации всего набора объектов игровой модели.
Однако я понял, что, поскольку игра представляет собой настольную игру, в которой нет случайных элементов и которая всегда инициализируется с одним и тем же состоянием, я мог бы реализовать функцию сохранения/загрузки, просто сериализовав объект, содержащий стек команд, и сами команды до этого момента, и затем повторно выполните все команды, чтобы вернуть игру в сохраненное положение.
Мой текущий дизайн не позволяет мне сделать это, так как мои команды содержат ссылки на экземпляры объектов, которые формируют плитки и части моей доски, что я считаю лучшей практикой объектно-ориентированного программирования. Это означало бы, что мне также пришлось бы сериализовать эти объекты модели, что противоречило бы цели простой сериализации команд и их выполнения. Мой вопрос заключается в том, будет ли считаться плохой практикой, если команды просто содержат целочисленные местоположения плиток досок.
Соответствующая часть моего кода класса Command:
private GameController controller;
private Tile sourceTile;
private Tile[] route;
public MoveCommand(GameController controller, Tile sourceTile, Tile... route) {
this.controller = controller;
this.sourceTile = sourceTile;
this.route = route;
}
@Override
public void execute() {
controller.executeMove(sourceTile, route);
}
Я намерен изменить ссылки Tile на ссылки на новый сериализуемый класс с именем TileLocation или что-то в этом роде, который будет содержать целые числа X и Y, чтобы плата могла находить плитки.