Singleton Reflexion und die Verwundbarkeit von Sequenzen Lösung!

Unter Verwendung die Reflexionstechnik um ein anderes Beispiel zu erhalten, ist die folgende eine einfache Formel hungernden Singletonmuster Code implementiert:

Wenn wir das Singleton-Objekt erhalten müssen, wenn sie direkt die statische Methode getInstance auf ihn nennen:

Aber gelernt Reflexion von Menschen wissen, dass Technologie kann auch durch die Reflexion auf eine Instanz einer Klasse von Objekten erhalten werden, auch wenn die Privatisierung ihres Baumeisters, können wir auch den Konstruktor besuchen wird durch Gewalt genannt, so dass mehr Testklasse läuft die Ergebnisse sind:

Es kann durch den Aufruf der getInstance Methode Instanz gesehen werden erworben wird die gleiche, aber erworben durch Reflektieren Instanz unterscheidet, in Verletzung des Singleton - Entwurfsmodus des Denkens, dann , wie sollten wir es lösen? Wir brauchen nur einen Richter an den privaten Konstruktor hinzuzufügen:

An dieser Stelle beginnen wir mit der Testklasse wieder, wobei die folgenden Ergebnisse zu erhalten:

Natürlich das Problem mit Reflexion Technologie zu lösen, die verschiedenen Instanzen zu erfassen.

Serialisierung und Deserialisierung Kunst erworben verschiedene Instanzen:

Wenn wir Singletonklasse implementiert Serializable-Schnittstelle, so kann dieser Klasse serialisiert werden und deserialisiert wird der Testcode wie folgt:

Die Ergebnisse sind wie folgt:

Wir Referenzen finden, nachdem gewesen zu Serialisierung und Deserialisierung von Objekten verändert wurde, und offenbar auch unter Verstoß gegen die Idee von Singleton-Entwurfsmuster nach readObject- Quelle Tracking, fand diese Methode die ersten sein wird, eine newInstance, schreiben und dann festzustellen, ob dieses Objekt diese Methode hat readResolve ob, wenn es keine, dann darauf zurück die newInstance direkt, falls vorhanden, readResolve diese Methode aufgerufen wird, ist diese Methode den Wert auf dem Quelle-Fragment readObject- folgt zurückgegeben zurückgibt:

Aus dem Vorstehenden brauchen wir nur eine Methode, um diese readResolve Singleton in dieser Klasse hinzuzufügen.

Aktivieren Testklasse wieder, die Ergebnisse sind wie folgt:

Autor: Mazin
https://my.oschina.net/u/3441184/blog/884767

Veröffentlicht 50 Originalarbeiten · erntete Lob 1706 · Aufrufe 2.220.000 +

Ich denke du magst

Origin blog.csdn.net/zl1zl2zl3/article/details/105298523
Empfohlen
Rangfolge