muszę zapisać historię stanów w ciągu kilku działań w aplikacji Java, które można później przeładowania w celu przywrócenia stanu w określonym działaniu. Innymi słowy, mam ekran, który ma stan powiązany z nim i muszę go przechowywać, jak również wszelkie zmiany w historii, aby w każdej chwili móc przywrócić stan ekranu. Jest to trochę jak "cofnij", ale nie dokładnie, ponieważ różnica między dwoma stanami może być bardzo duża i nie ma dobrze zdefiniowanych działań, które zmieniają stany.Tworzenie historii państw w Javie
Pozwól mi wyjaśnić na przykładzie: Bardzo podstawowy stan ekran może zawierać tylko jedną mapę. W stanie A ta mapa zawiera odniesienie do "Obiektu1" za pomocą klucza "Klucz1" i "Obiekt2" za pomocą klucza "Klucz2". W stanie B mapa nadal zawiera odniesienie do "Obiektu1", ale "Obiekt2" został zmodyfikowany i dodano "Obiekt3". Teraz muszę mieć możliwość powrotu do stanu A, co oznaczałoby "upuszczenie" obiektu 3 i przywrócenie obiektu 2 do poprzedniego stanu. Nie mogę zdefiniować żadnych niestandardowych "operacji cofania", ponieważ nie wiem, jakie zmiany zostały wprowadzone w Object2, a nawet jaki jest typ Object2. Ponadto, ponieważ referencja pozostaje taka sama dla obiektu 2 w stanie A i B, zmiany te są odzwierciedlane w stanie A, więc obiekt2 nie jest taki sam jak był.
Zdaję sobie sprawę, najlepszym rozwiązaniem jest wdrożenie metod klon, ale jak trzeba obsługiwać wszystkie typy obiektów (w tym prymitywów i standardowych zbiorów) nie jest to możliwe. Pomyślałem o używaniu serializowalnych, gdzie serializowałem mapę jak tylko nastąpi przemiana stanu, a następnie deserializuję ją, kiedy będzie potrzebna, ale wydaje się to bardzo brzydkim rozwiązaniem.
Czy ktoś ma jakieś inne pomysły? Dziękuję Ristretto
Powiedziałeś, że musisz wspierać wszystkie rodzaje obiektów i prymitywów ... Wtedy mówisz, że myślisz o serializacji mapy. ... nie do końca rozumiem. –