Я участвую в процессе разработки приложения, и я хотел бы использовать command pattern для целей отмены/повтора. Я провел некоторое исследование в шаблоне команд, но единственное, чего я не получу, это: Если команда имеет методы отмены и повтора, или я должен сделать две отдельные команды: одну для отмены и одну для повтора, и вызвать их из основная команда сама?Выполнение командного шаблона
ответ
Сам объект команды должен реализовать функциональность отмены/повтора.
Команды обычно выталкиваются и выталкиваются из стека, поддерживаемого диспетчером команд, для реализации отмены нескольких уровней. Когда команды выполняются, они помещаются в стек, а когда они отменены, они выталкиваются из стека.
Памятный шаблон будет использоваться в сочетании с шаблоном команды, это не заменяет использование шаблона команды. Он будет использоваться для поддержания состояния, необходимого для операции отмены.
Возможно, вы также захотите рассмотреть шаблон памяти для этого, мы его используем, и он отлично подходит для отмены.
Будет ли шаблон памяти более трудоемким для реализации, а затем шаблон команды, когда я хочу его только для отмены? – slayerIQ
@slayerIQ Мемориальный шаблон будет использоваться в сочетании с шаблоном команды, это не замена использования шаблона команды. – David
Таким образом, память будет содержать отскоки и стопки повторов, а стеки будут содержать команды, которые я прав? – slayerIQ
Я бы добавил, что лучшее решение - это не просто простой стек. Вместо этого вам нужен список и ссылка на текущий элемент. Отменяет ход назад, и * переделывает * идет вперед. Использование стека не позволяет повторить. – munificent
Я использовал 2 стека, отменил и повторил стек. Если вы отмените действие, оно выскакивает из стека отмены и нажимается на стек повтора. Добавление нового действия нажимает новый на стопку отмены и очищает стек повтора. – Wout