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