Сделано что-то похожее, но очень быстро.
Чтобы выполнить «отмену» / «откат», вам необходимо выполнить несколько действий:
[1] Для сохранения / регистрации / сериализации значения заданных объектов («Пакет» и «Сервис») перед выполнением операции.
Если операция прошла успешно, эта информация может быть удалена или просто сохранена как исторические данные. В противном случае используйте его для возврата объектов в предыдущее состояние.
Вы также можете зарегистрировать новые изменения.
[2] Вы должны зарегистрировать меню или набор операций, которые могут быть выполнены вашим приложением,
и в конечном итоге откат.
+----------------+ +------------------+
|................| |..................|
|................| |..................|
|.......App......|/\ |.....Operation....|
|................| ----------|..................|
|................|\/ |..................|
+----------------+ 1 * +------------------+
Например, если вместо приложения «пакет и услуги» вы выполняете программу Paint.
В вашем приложении у вас будет набор действий или операций, и одной из этих операций является «Квадрат с заливкой».
[3] Каждый раз, когда вы выполняете одну из этих операций, даже если она дублируется, у вас есть регистр или журнал каждой операции, которую можно выполнить, или откат.
+----------------+ +------------------+
|................| |..................|
|................| |..................|/\ 1
|.......App......|/\ |....Operation.....| --------+
|................| ----------|..................|\/ |
|................|\/ |..................| |
+----------------+ 1 * +------------------+ |
/\ |
\/ |
| +------------------+ |
1 | |..................| |
+--------------------|..................| |
* |.......Log........|----------+
|..................| * (The same operation can be
|..................| registered in the log,
+------------------+ several times)
Когда вы запускаете приложение Paint, вы используете «квадрат с краской» несколько раз.
[4] В вашем списке вам нужна противоположная операция, которая восстанавливает соответствующую.
+----------------+ +------------------+
|................| |..................|-------+ 1
|................| |..................| |
|.......App......|/\ |.....Operation....| |
|................| ----------|..................|-------+ 1
|................|\/ |..................|
+----------------+ 1 * +------------------+
Использование предыдущего приложения Paint. Например, у вас должна быть операция «Восстановить заполненный квадрат», которая покидает область, как до того, как пользователь нарисовал заполненный квадрат.
Не волнует, как это делается, заботиться о том, чтобы был соответствующий.
[5] Соответствующая противоположная операция также должна быть зарегистрирована в журнале.