Я начинаю реализовывать шаблон команды в надежде найти полезное решение моей проблемы с предоставлением операции отмены. Сейчас я сталкиваюсь с определенной проблемой:
Реализация отмены, когда задействованы операции, довольно проста: когда я добавляю 5 к числу, я вычитаю 5. Когда я добавляю объект в список, я удаляю его и так далее. Но что, если у меня есть общее состояние, а не что-то вроде списка?
Пример: я моделирую информацию о потоке в классе:
public class ThreadInfo implements Comparable<ThreadInfo> {
final int id;
String name;
int priority;
String state;
int waitCount;
// ...
}
Некоторая информация не изменяется, например, идентификатор. Отменить waitCount
просто, как описано выше, просто вычесть. Но как насчет priority
или state
? Не ясно, как отменить эту информацию.
Единственная идея, которая мне пришла в голову: при инициализации объекта команды сохранить старое состояние в его объекте: передав соответствующие данные в конструктор:
public MyCommand(int priority, String state) {
previousPriority = priority;
previousState = state;
}
Или лучше было бы ThreadInfo
иметь список состояний и приоритетов, чтобы быть первыми элементами текущего?