Мне нужно сохранить историю состояний по нескольким действиям в приложении Java, которые я могу позже перезагрузить, чтобы восстановить состояние при определенном действии. Другими словами, у меня есть экран, с которым связано состояние, и мне нужно сохранить его, а также любые изменения в истории, чтобы я мог восстановить состояние экрана в любое время. Это похоже на «отмену», но не совсем так, поскольку разница между двумя состояниями может быть очень большой, и нет четко определенных действий, которые изменяют состояния.
Позвольте мне объяснить на примере:
Очень базовое состояние экрана может содержать только одну карту. В состоянии А эта Карта содержит ссылку на «Объект1» с ключом «Ключ1» и «Объект2» с ключом «Ключ2». В состоянии B карта все еще содержит ссылку на «Object1», но «Object2» был изменен, и «Object3» был добавлен. Теперь мне нужно иметь возможность вернуться в состояние A, что потребует «сбрасывания» Object3 и восстановления Object2 в его предыдущем состоянии. Я не могу определить какие-либо пользовательские «действия по отмене», так как я не знаю, какие изменения были внесены в Object2 или даже каков тип Object2. Кроме того, поскольку ссылка для Object2 в состояниях A и B остается неизменной, эти изменения отражаются в состоянии A, поэтому Object2 отличается от того, что было.
Я понимаю, что лучшим решением является реализация методов клонирования, но, поскольку мне нужно поддерживать все типы объектов (включая примитивы и стандартные коллекции), это неосуществимо. Я думал об использовании сериализуемого, где я сериализировал бы Карту, как только произошел переход состояния, и затем десериализовал бы ее, когда она снова понадобилась, но это кажется очень уродливым решением.
У кого-нибудь есть другие идеи?
Спасибо,
Ristretto