2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Proxy-Muster ist ein strukturelles Entwurfsmuster, das den Zugriff auf ein anderes Objekt durch Einführung eines Proxy-Objekts steuert. Dieses Proxy-Objekt kann dem Proxy-Objekt zusätzliche Funktionen bereitstellen, z. B. Zugriffskontrolle, verzögerte Initialisierung, Protokollierung oder Netzwerkzugriff.
Remote-Agent:
virtueller Agent:
Schutzmittel:
Intelligente Führung:
Das Folgende ist ein einfaches Implementierungsbeispiel des Proxy-Musters, das zeigt, wie der Zugriff auf ein tatsächliches Objekt über ein Proxy-Objekt gesteuert wird.
public interface Subject {
void request();
}
Subject
Die Schnittstelle definiert arequest
Methode: Dies ist die Methode, die sowohl vom tatsächlichen Objekt als auch vom Proxy-Objekt implementiert werden muss.public class RealSubject implements Subject {
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
RealSubject
Klasse implementiertSubject
Schnittstellerequest
Methode, die die Klasse darstellt, die die Anfrage tatsächlich verarbeitet.public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
if (this.checkAccess()) {
this.realSubject.request();
this.logAccess();
}
}
private boolean checkAccess() {
// 检查访问权限
System.out.println("Proxy: Checking access prior to firing a real request.");
return true;
}
private void logAccess() {
// 记录请求日志
System.out.println("Proxy: Logging the time of request.");
}
}
Proxy
Klasse implementiertSubject
Schnittstelle und hält aRealSubject
Objekt.request
Bei der Methode prüft die Proxy-Klasse zunächst die Zugriffsberechtigungen und ruft dann die des realen Objekts aufrequest
Methode und zeichnen Sie schließlich das Anforderungsprotokoll auf.public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
}
Client
Klasse erstelltRealSubject
UndProxy
Objekt, durchProxy
Objektaufrufrequest
Methode zur Steuerung derRealSubject
Zugang.Isolierung:
Sicherheit:
Skalierbarkeit:
Intelligent:
Codekomplexität:
Reaktionszeit:
Designschwierigkeit:
Client
|
v
Subject <---- Proxy <---- RealSubject
Das Proxy-Muster bietet eine effiziente Möglichkeit, den Zugriff auf Objekte zu steuern und zu verwalten. Durch die Verwendung von Proxys können Sie verschiedene Funktionen hinzufügen und gleichzeitig die Verantwortlichkeiten von Geschäftsobjekten klar halten. Dieser Modus eignet sich besonders für Szenarien, die eine Zugriffskontrolle und andere Vorverarbeitungsvorgänge für Geschäftsobjekte erfordern.
Fassadenmuster ist ein strukturelles Entwurfsmuster, das die Verwendung komplexer Subsysteme erleichtert, indem es eine einheitliche Schnittstelle für den Zugriff auf eine Gruppe von Schnittstellen im Subsystem bereitstellt. Das Fassadenmuster definiert eine High-Level-Schnittstelle, die die Verwendung dieses Subsystems erleichtert.
Vereinfachen Sie Schnittstellen zu komplexen Systemen:
Hierarchie:
Entkoppeltes System:
Im Folgenden finden Sie ein einfaches Implementierungsbeispiel des Fassadenmusters, das zeigt, wie die Verwendung von Subsystemen durch Fassadenklassen vereinfacht werden kann.
public class SubsystemA {
public void operationA() {
System.out.println("SubsystemA: operationA");
}
}
public class SubsystemB {
public void operationB() {
System.out.println("SubsystemB: operationB");
}
}
public class SubsystemC {
public void operationC() {
System.out.println("SubsystemC: operationC");
}
}
public class Facade {
private SubsystemA subsystemA;
private SubsystemB subsystemB;
private SubsystemC subsystemC;
public Facade() {
this.subsystemA = new SubsystemA();
this.subsystemB = new SubsystemB();
this.subsystemC = new SubsystemC();
}
public void operation1() {
System.out.println("Facade: operation1");
subsystemA.operationA();
subsystemB.operationB();
}
public void operation2() {
System.out.println("Facade: operation2");
subsystemB.operationB();
subsystemC.operationC();
}
}
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.operation1();
facade.operation2();
}
}
Subsystemklasse:
SubsystemA
, SubsystemB
, Und SubsystemC
Es handelt sich um die spezifische Implementierungsklasse des Subsystems, und jede Klasse verfügt über ihre eigene, einzigartige Operationsmethode.Erscheinungsklasse:
Facade
Klassen enthalten Subsystemobjekte und stellen vereinfachte Schnittstellen bereitoperation1
Undoperation2
um Subsystemfunktionen aufzurufen.Client-Code:
Client
Klasse bestandenFacade
Klasse anzurufenoperation1
Undoperation2
, wodurch die Verwendung komplexer Subsysteme vereinfacht wird.Vereinfachte Schnittstelle:
lose Kopplung:
bessere Schichtung:
Entspricht nicht dem Auf-Zu-Prinzip:
Kann Leistungsprobleme verursachen:
Client
|
v
Facade ----> SubsystemA
----> SubsystemB
----> SubsystemC
Das Facade-Muster erleichtert die Arbeit mit komplexen Subsystemen, indem es eine vereinfachte Schnittstelle bereitstellt. Es eignet sich für Szenarien, in denen es erforderlich ist, die Subsystemschnittstelle zu vereinfachen, die direkte Interaktion zwischen Client und Subsystem zu reduzieren und die Systemhierarchie zu entkoppeln. Obwohl es das Potenzial hat, gegen das Offen-Geschlossen-Prinzip zu verstoßen, überwiegen seine Vorteile in den meisten Fällen bei weitem seine Nachteile, wodurch das Systemdesign klarer und einfacher zu warten ist.