Ответ 1
Я считаю, что это должен быть Command шаблон дизайна.
Вот статья о многоуровневом Undo/Redo с шаблоном команды.
EDIT: second о многоуровневом Undo/Redo с шаблоном Memento.
Так что, возможно, это можно сделать с обоими.
Возможный дубликат:
Шаблон проектирования для Undo Engine
В целом, как вы относитесь к поддержке функции "отмены" в вашем приложении? Я работал над веб-приложениями и приложениями для настольных компьютеров, и я никогда не чувствовал себя комфортно в любой системе "отмены", которую я сделал.
Я считаю, что это должен быть Command шаблон дизайна.
Вот статья о многоуровневом Undo/Redo с шаблоном команды.
EDIT: second о многоуровневом Undo/Redo с шаблоном Memento.
Так что, возможно, это можно сделать с обоими.
Просмотрите Memento Pattern
Я проголосовал бы за командный шаблон над Memento. Memento будет намного дороже, чем командные шаблоны для функций Undo/Redo.
Захват и восстановление состояния объекта будет довольно дорогостоящим делом по сравнению с просто выполнением или отменой действие на любой совместимый объект.