Definition:
Stellen Sie einen Ersatz oder einen Platzhalter für ein anderes Objekt zur Verfügung, um den Zugriff darauf zu steuern.
Ein Proxy für andere Objekte, um den Zugriff auf dieses Objekt zu steuern.
Allgemeine Beschreibung:
Es enthält im Allgemeinen drei Rollen: abstraktes Thema, konkretes Thema und Agententhema.
Allgemeines Klassendiagramm:
Allgemeiner Code:
Paketproxy; // Abstract Topic Class: Public Interface Betreff {public void doSomething ();} Paketproxy; // spezifische Themenklasse öffentliche Klasse RealSubject implementiert Betreff {@Override public void dosomething () {System.out.println ("Business Logic ..."); }} Paketproxy; // Proxy Topic Class Proxy implementiert Betreff {private Subjekt sub = null; @Override public void dosomething () {this.sub.dosomething (); } public proxy (Subjekt sub) {this.sub = sub; }} Paketproxy; // Client public Class Client {public static void main (String [] args) {Subjekt realSub = new RealSubject (); Betreff Proxy = New Proxy (RealSub); Proxy.Dosomething (); }}Vorteil :
1. Eindeutige Verantwortlichkeiten
2. hohe Expansion
Erweiterungen des Proxy -Modus:
Normaler Agent:
Spezifische Themenklassen sind transparent zu hochrangigen Ebenen, und bestimmte Themenklassen werden in Proxy-Themenklassen konstruiert.
Code -Implementierung:
Paket GeneralProxy; public interface Subjekt {public void dosomething ();} Paket GeneralProxy; öffentliche Klasse RealSubject implementiert Betreff {private String name = null; @Override public void dosomething () {system.out.println (this.name + "proxy, ausführende Geschäftslogik ..."); } public RealSubject (Betreff Proxy, String -Name) löst Ausnahme aus {if (proxy == null) {neue Ausnahme werfen ("Proxy -Objekt kann nicht erstellt werden"); } else {this.name = name; }}} Paket GeneralProxy; public class Proxy implementiert das Fach {privates Thema realSub = null; public proxy (String name) {try {realSub = new RealSubject (this, name); } catch (Ausnahme e) {e.printstacktrace (); }} public void dosomething () {realSub.dosomething (); }} Paket GeneralProxy; öffentliche Klasse Client {public static void main (String [] args) {// gewöhnliche Proxy -Subjekt proxy = new Proxy ("Zhang san"); proxy.dosomethaing (); }}
Erzwungener Stellvertreter:
Sie müssen das Objekt der Proxy -Themenklasse erhalten, indem Sie auf die spezifische Themenklasse zugreifen, und dann die Proxy -Themenklasse verwenden, um den Zugriff zu steuern.
Code -Implementierung:
Paket MustProxy; public interface fach {public void dosomething (); öffentliches Thema getProxy ();} Paket MustProxy; öffentliche Klasse RealSubject implementiert Betreff {private String name = null; privates Thema Proxy = NULL; @Override public void dosomething () {if (isProxy ()) {System.out.println (this.name + "Proxy, Ausführung von Geschäftslogik ..."); } else {System.out.println ("Bitte zuerst auf den Proxy zugreifen ..."); }} public RealSubject (String -Name) {this.name = name; } public Subjekt getProxy () {proxy = new Proxy (this); kehre diesen.Proxy zurück; } private boolean isProxy () {if (this.proxy == null) {return false; } else {return true; }}} Paket MustProxy; public class Proxy implementiert das Fach {privates Thema realSub = null; public proxy (Subjekt realSub) {this.realSub = realSub; } public void dosomething () {this.realsub.dosomething (); } public Subjekt getProxy () {return this; }} Paket MustProxy; öffentliche Klasse Client {public static void main (String [] args) {Subjekt realSub = new RealSubject ("Zhang san"); realSub.dosomething (); Betreff Proxy = RealSub.getProxy (); Proxy.Dosomething (); }} Anwendungsszenarien
In der realen Welt entspricht der Sekretär einem Agenten. Wenn der Chef ein Treffen abhält, benachrichtigen Sie die Mitarbeiter über die Besprechungszeit, arrangieren Sie den Veranstaltungsort, sortieren Sie den Veranstaltungsort nach dem Treffen usw., Sie können die besprechenden Arbeiten an den Sekretär übergeben. Der Chef muss nur das Treffen abhalten und muss diese Dinge nicht persönlich tun. In ähnlicher Weise können wir in unserer Programmierung auch das Proxy -Muster verwenden, um den Code zu entkoppeln, der mit einer Reihe nicht verwandter Logik kombiniert wird, z. Die AOP von Spring ist eine typische dynamische Proxy -Anwendung.
Anwendungsform des Proxy -Modus
(1) Remote -Proxy - kann die Tatsache verbergen, dass ein Objekt in verschiedenen Adressräumen existiert. Außerdem können Clients auf Objekte auf Remote -Maschinen zugreifen. Remote -Maschinen haben möglicherweise eine bessere Rechenleistung und -verarbeitungsgeschwindigkeit und können schnell auf Kundenanfragen reagieren und verarbeiten.
(2) Virtueller Proxy ermöglicht es, bei Bedarf Objekte mit hohem Speicheraufwand zu erstellen. Erstellen Sie nur, wenn wir dieses Objekt wirklich brauchen.
(3) Copy-on-Write-Proxy wird verwendet, um das Kopieren von Objekten zu steuern, indem das Kopieren von Objekten verzögert wird, bis der Kunde sie wirklich benötigt. Es ist eine Variante des virtuellen Proxy.
(4) Protection (Access) Proxy) bietet verschiedene Ebenen der Zugriffsrechte für Zielobjekte für verschiedene Kunden
(5) Cache -Proxy bietet einen temporären Speicher für Overhead -Computerergebnisse. Es ermöglicht mehreren Kunden, Ergebnisse zu teilen, um die Berechnung oder die Netzwerklatenz zu verringern.
(6) Firewall -Proxy kontrolliert den Zugriff auf Netzwerkressourcen und schützt das Thema vor böswilligen Kunden.
(7) SynchronisationProxy bietet bei Multi-Threading einen sicheren Zugriff auf das Thema.
(8) Smart Reference Proxy - Wenn auf ein Objekt verwiesen wird, liefert es einige zusätzliche Vorgänge, z. B. die Anzahl der Aufrufe an dieses Objekt usw. aufzeichnen.
(9) Komplexitätsversteck Proxy wird verwendet, um die Komplexität einer komplexen Sammlung einer Klasse zu verbergen und die Zugriffskontrolle durchzuführen. Manchmal wird es auch als Fassade -Proxy bezeichnet, was nicht schwer zu verstehen ist. Komplexer versteckter Proxy und Aussehensmodus sind unterschiedlich, da der Proxy den Zugriff steuert, während der Aussehensmodus unterschiedlich ist, da der Proxy den Zugriff steuert, während der Aussehensmodus nur einen anderen Satz von Schnittstellen bietet.