![]() |
Реализация возможности «Шаг назад» (отменить действие)
Здравствуйте.
Есть карта, на которой пользователь может производить некоторые действия (ставить точки, рисовать полигоны и прочее). Нужно в приложении организовать возможность, после какого-либо действия, вернуться в предыдущее, пред-предыдущее (и т.д.) состояние. Может кто-нибудь сталкивался с таким вопросом. Подскажите как лучше сделать. Копировать карту в память каждый раз при любом изменении? Или есть другие варианты? |
Смотря каким образом у вас производятся "некоторые действия". Можно к каждому "конструктору" отображаемой части действия написать "деструктор", с теми же параметрами. И при каждом "совершении" действия (вызова "конструктора" с определёнными параметрами), банально кидать в массив параметры действия. При вызове "шага назад" - просто передавать соответствующему деструктору последние добавленные в массив параметры
|
Для таких задач решение придумали давно.
|
Шаблон может и хорош, но хранить состояния, вместо того, чтобы хранить изменения состояния - мне кажется глупым.
|
Цитата:
|
http://www.rsdn.ru/article/dotnet/backforward.xml
Тут принципы реализации, на ActionScript перевести думаю труда не составит |
Команда здесь, мне кажется, самое то.
|
Подхода тут всего 2:
- список состояний/изменений сохраняем данные на каждом изменении и при откате разбираем switch-ами - список комманд при редактоировании применяем комманды, которые сами запоминают нужные данные для отката. Первый подход проще. Второй гибше и расширяемей. А что запоминать - изменения или все состояние - это зависит от требуемых ресурсов. Запоминать все проще, но если дорого - надо запоминать только изменения. |
команд [x]
http://en.wikipedia.org/wiki/Command_pattern Command objects are useful for implementing: Multi-level undo и прочая. Мементо не предлагаю, т.к. он избыточен. |
| Часовой пояс GMT +4, время: 09:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.