Шаблон проектирования для отмены движка - PullRequest
114 голосов
/ 08 сентября 2008

Я пишу инструмент структурного моделирования для применения в гражданском строительстве. У меня есть один огромный класс модели, представляющий все здание, которое включает в себя наборы узлов, линейных элементов, нагрузок и т. Д., Которые также являются пользовательскими классами.

Я уже кодировал механизм отмены, который сохраняет глубокую копию после каждой модификации модели. Теперь я начал думать, мог бы я по-другому кодировать. Вместо сохранения глубоких копий, я мог бы сохранить список каждого действия модификатора с соответствующим обратным модификатором. Чтобы я мог применить обратные модификаторы к текущей модели, чтобы отменить, или модификаторы, чтобы повторить.

Я могу представить, как вы выполняете простые команды, которые изменяют свойства объекта и т. Д. Но как насчет сложных команд? Как вставка новых объектов узлов в модель и добавление некоторых линейных объектов, которые сохраняют ссылки на новые узлы.

Как можно реализовать это?

Ответы [ 22 ]

0 голосов
/ 28 сентября 2010

Я не знаю, будет ли это вам полезно, но когда мне пришлось сделать что-то подобное в одном из моих проектов, я закончил тем, что скачал UndoEngine с http://www.undomadeeasy.com - замечательный движок и я действительно не слишком заботился о том, что было под капотом - это просто работало.

0 голосов
/ 17 февраля 2009

В первом разделе Design Patterns (GoF, 1994) есть сценарий использования для реализации отмены / повтора в качестве шаблона проектирования.

...