Das Proxy-Entwurfsmuster ist eines der Strukturmuster und meiner Meinung nach eines der einfachsten Muster zu verstehen.
Proxy-Entwurfsmuster
Die Absicht des Proxy-Entwurfsmusters laut GoF ist: Eine Stellvertreter oder Platzhalter für ein anderes Objekt bereitzustellen, um den Zugriff darauf zu steuern. Die Definition selbst ist sehr klar, und das Proxy-Entwurfsmuster wird verwendet, wenn wir kontrollierten Zugriff auf eine Funktionalität bereitstellen möchten. Angenommen, wir haben eine Klasse, die einen Befehl im System ausführen kann. Wenn wir sie verwenden, ist das in Ordnung, aber wenn wir dieses Programm einer Clientanwendung geben wollen, kann das schwerwiegende Probleme haben, weil die Clientanwendung Befehle zum Löschen einiger Systemdateien oder zum Ändern einiger Einstellungen ausführen kann, die wir nicht möchten. Hier kann eine Proxyklasse erstellt werden, um kontrollierten Zugriff auf das Programm bereitzustellen.
Proxy-Entwurfsmuster – Hauptklasse
Da wir Java in Bezug auf Schnittstellen codieren, hier ist unsere Schnittstelle und ihre Implementierungsklasse. CommandExecutor.java
package com.journaldev.design.proxy;
public interface CommandExecutor {
public void runCommand(String cmd) throws Exception;
}
CommandExecutorImpl.java
package com.journaldev.design.proxy;
import java.io.IOException;
public class CommandExecutorImpl implements CommandExecutor {
@Override
public void runCommand(String cmd) throws IOException {
// einige schwere Implementierung
Runtime.getRuntime().exec(cmd);
System.out.println("'" + cmd + "' command executed.");
}
}
Proxy-Entwurfsmuster – Proxy-Klasse
Jetzt möchten wir nur Administratoren vollen Zugriff auf die obige Klasse ermöglichen, wenn der Benutzer kein Administrator ist, werden nur eingeschränkte Befehle erlaubt sein. Hier ist unsere sehr einfache Implementierung der Proxy-Klasse. CommandExecutorProxy.java
package com.journaldev.design.proxy;
public class CommandExecutorProxy implements CommandExecutor {
private boolean isAdmin;
private CommandExecutor executor;
public CommandExecutorProxy(String user, String pwd){
if("Pankaj".equals(user) && "J@urnalD$v".equals(pwd)) isAdmin=true;
executor = new CommandExecutorImpl();
}
@Override
public void runCommand(String cmd) throws Exception {
if(isAdmin){
executor.runCommand(cmd);
}else{
if(cmd.trim().startsWith("rm")){
throw new Exception("rm command is not allowed for non-admin users.");
}else{
executor.runCommand(cmd);
}
}
}
}
Proxy Design Pattern Client Program
ProxyPatternTest.java
package com.journaldev.design.test;
import com.journaldev.design.proxy.CommandExecutor;
import com.journaldev.design.proxy.CommandExecutorProxy;
public class ProxyPatternTest {
public static void main(String[] args){
CommandExecutor executor = new CommandExecutorProxy("Pankaj", "wrong_pwd");
try {
executor.runCommand("ls -ltr");
executor.runCommand(" rm -rf abc.pdf");
} catch (Exception e) {
System.out.println("Exception Message::"+e.getMessage());
}
}
}
Die Ausgabe des obigen Beispielprogramms für das Proxy-Entwurfsmuster lautet:
'ls -ltr' command executed.
Exception Message::rm command is not allowed for non-admin users.
Gängige Anwendungen des Proxy-Entwurfsmusters sind die Zugriffssteuerung oder die Bereitstellung einer Wrapper-Implementierung für bessere Leistung. Das Java RMI-Paket verwendet das Proxy-Muster. Das ist alles für das Proxy-Entwurfsmuster in Java.
Source:
https://www.digitalocean.com/community/tutorials/proxy-design-pattern