Ich muss eine Geschichte von Zuständen über einige Aktionen in einer Java-Anwendung speichern, die ich später neu laden kann, um den Zustand bei einer bestimmten Aktion wiederherzustellen. Mit anderen Worten, ich habe einen Bildschirm, dem ein Status zugeordnet ist, und ich muss ihn sowie alle Änderungen in einem Verlauf speichern, damit ich den Status des Bildschirms jederzeit wiederherstellen kann. Dies ist eine Art "Rückgängigmachen", aber nicht genau, da der Unterschied zwischen zwei Zuständen sehr groß sein kann und es keine genau definierten Aktionen gibt, die die Zustände ändern.Erstelle Geschichte von Zuständen in Java
Lassen Sie mich mit einem Beispiel erklären: Ein sehr einfacher Bildschirmzustand könnte nur eine einzige Karte enthalten. Im Zustand A enthält diese Karte einen Verweis auf "Object1" mit den Schlüsseln "Key1" und "Object2" mit dem Schlüssel "Key2". Im Zustand B enthält die Map noch den Verweis auf "Object1", aber "Object2" wurde modifiziert und ein "Object3" wurde hinzugefügt. Ich muss jetzt in der Lage sein, zu Zustand A zurückzukehren, was das "Fallenlassen" von Objekt3 und das Wiederherstellen von Objekt2 in seinen vorherigen Zustand beinhalten würde. Ich kann keine benutzerdefinierten "Rückgängig-Aktionen" definieren, da ich nicht weiß, welche Änderungen an Object2 vorgenommen wurden oder was der Typ von Object2 ist. Da die Referenz für Objekt 2 in Zustand A und B gleich bleibt, spiegeln sich diese Änderungen im Zustand A wider, so dass Objekt 2 nicht mehr derselbe ist.
Ich weiß, die beste Lösung ist, Klon-Methoden zu implementieren, aber da ich alle Arten von Objekten (einschließlich Primitiven und Standardsammlungen) unterstützen muss, ist dies nicht machbar. Ich habe über serializable nachgedacht, wo ich die Map serialisieren würde, sobald ein Zustandsübergang stattfindet, und sie dann deserialisieren würde, wenn sie wieder benötigt wird, aber es scheint eine sehr hässliche Lösung zu sein.
Hat jemand noch andere Ideen? Vielen Dank, Ristretto
Du hast gesagt, du musst alle Arten von Objekten und Primitiven unterstützen .... Dann sagst du, dass du daran denkst, die Karte zu serialisieren. ... nicht richtig verstanden. –