Leider hat Google mich gescheitert ...Was ist das Serialisierungs-Proxy-Muster?
Was ist die Serialisierung Proxy-Muster und wo kann ich mehr über die Implementierung und Verwendung erfahren?
Leider hat Google mich gescheitert ...Was ist das Serialisierungs-Proxy-Muster?
Was ist die Serialisierung Proxy-Muster und wo kann ich mehr über die Implementierung und Verwendung erfahren?
Es gibt eine Beispielimplementierung in this answer.
Es gibt eine schöne Beschreibung im letzten Abschnitt von Josh Bloch Effektive Java, Second Edition.
Angenommen, Sie haben eine Klasse A
, die Sie serialisieren möchten. Sie deklarieren es zuerst, um Serializable
zu implementieren. Dann verwenden Sie die Serialisierungsmethode writeReplace()
, um einen sogenannten "Serialisierungs-Proxy" zurückzugeben, der anstelle der Instanz A
serialisiert wird. Die Methode writeReplace()
muss nicht öffentlich sein. Die Standardserialisierung unter A
wird nie aufgerufen, sodass alle API-Eigenschaften von A
beibehalten werden können.
Normalerweise ist der Proxy als private static geschachtelte Klasse implementiert, die selbst Serializable
(oder Externalizable
für die vollständige Kontrolle des Lese-/Schreibvorgangs implementieren muss). Da der Proxy privat ist, werden seine Implementierungsdetails, z. B. mit einem Konstruktor ohne Argumente und veränderbar, ausgeblendet.
Der Proxy speichert genug Status des ursprünglichen Objekts, das geschrieben werden soll, damit das Objekt bei der Deserialisierung wiederhergestellt werden kann. Bei der Deserialisierung verwendet der Proxy die Methode readResolve()
, um eine Instanz von A
zurückzugeben. Bei Singletons kann dies die Singleton-Instanz selbst sein.
Ich schrieb einen ausführlichen Blogeintrag mit Beispielen, Serializing Immutables and Singletons with a Serialization Proxy.
Ich fragte mich, ob der Serialisierungs-Proxy Externalisierbar sein könnte. Das Buch erwähnt nur Serializable. Vielen Dank! –