Java Entwickler Experte
Heute werfen wir einen Blick auf das nächste Entwurfsmuster (Java design patterns) aus der Kategorie der strukturellen Muster (structural patterns) – Proxy. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (inheritance) und Komposition (composition).

In diesem Artikel erfährst du:
Proxy ist ein Entwurfsmuster, das den Zugriff auf ein Objekt über ein anderes Objekt (Proxy) ermöglicht und zusätzliche Funktionalitäten bereitstellt, wie z. B. die Überprüfung von Zugriffsrechten, das Protokollieren von Zugriffen, das verzögerte Erstellen ressourcenintensiver Objekte und mehr. Dieses Muster gehört zur Gruppe der strukturellen Muster, da es sich damit beschäftigt, wie Objekte zu größeren Strukturen zusammengesetzt werden.
Proxy löst effektiv die Fälle, in denen wir die Kontrolle über den Zugriff auf ein Objekt haben möchten. Zum Beispiel, wenn wir mit einem Objekt mit sensiblen Daten arbeiten, auf das die Anwendung nur unter bestimmten Bedingungen zugreifen darf, oder wenn wir wissen müssen, welche Clients wann auf das betreffende Objekt zugegriffen haben. Proxy ermöglicht es uns, solche Situationen zu lösen, ohne direkten Zugriff auf das Hauptobjekt zu haben. Für den Klienten ist die Verwendung eines Proxy-Objekts ähnlich wie die Verwendung des echten Objekts, da beide dasselbe Interface implementieren, obwohl der Proxy tatsächlich eine Wrapper-Klasse des echten Objekts ist.
Wir werden nun ein Programm implementieren, das die Verwendung des Entwurfsmusters Proxy in Java bei der Anmeldung an einem Informationssystem demonstriert. Das Programm überprüft auch die Zugriffsrechte und protokolliert den Zugriff.
Pristup.java
package designpatterns;
// Rozhranie definujúce spoločné metódy pre RealnyPristup a ProxyPristup.
public interface Pristup {
void vykonajOperaciu(String meno, String heslo, int idKlienta);
}
Das Interface Pristup definiert die Methode vykonajOperaciu, die sowohl für den RealnyPristup als auch für den ProxyPristup gemeinsam ist.
RealnyPristup.java
package designpatterns;
// RealnyPristup - skutočný objekt, ktorý implementuje rozhranie Pristup.
public class RealnyPristup implements Pristup {
public void vykonajOperaciu(String meno, String heslo, int idKlienta) {
System.out.println("Vykonávam operáciu pre klienta s ID: " + idKlienta);
}
}
Die Klasse RealnyPristup, implementiert die Schnittstelle Pristup. Stellt das echte Objekt dar, das die Operation für den Klienten mit der angegebenen ID tatsächlich ausführt.
ProxyPristup.java
package designpatterns;
import java.util.Date;
public class ProxyPristup implements Pristup {
private RealnyPristup realnyPristup;
public void vykonajOperaciu(String meno, String heslo, int idKlienta) {
logujPristup(idKlienta);
if (skontrolujPristupovePrava(meno, heslo)) {
if (realnyPristup == null) {
realnyPristup = new RealnyPristup();
System.out.println("Prístup bol povolený.");
}
realnyPristup.vykonajOperaciu(meno, heslo, idKlienta);
} else {
System.out.println("Nesprávne prístupové údaje. Prístup bol zamietnutý!");
}
}
private boolean skontrolujPristupovePrava(String meno, String heslo) {
// Simulácia kontrolu prístupových práv, môžete pridať vlastnú logiku
return "admin".equals(meno) && "heslo123".equals(heslo);
}
private void logujPristup(int idKlienta) {
// Simulácia logovania prístupu
System.out.println("Pristup klienta s ID [" + idKlienta + "] do systému o " + new Date());
}
}
Die KlasseProxyPristup, implementiert die Schnittstelle Pristup. Stellt das Proxy-Objekt dar, das die Zugriffsrechte basierend auf Benutzernamen und Passwort überprüft. Gleichzeitig protokolliert es den Zugriff, und wenn die Zugangsdaten korrekt sind, delegiert es den Methodenaufruf vykonajOperaciu an das echte Objekt RealnyPristup.
Main.java
import designpatterns.Pristup;
import designpatterns.ProxyPristup;
public class Main {
public static void main(String[] args) throws InterruptedException {
// Použitie Proxy
Pristup proxy = new ProxyPristup();
proxy.vykonajOperaciu("jwagner", "heslo123", 823);
System.out.println();
Thread.sleep(800);
proxy.vykonajOperaciu("admin", "heslo1234", 111);
System.out.println();
Thread.sleep(700);
proxy.vykonajOperaciu("admin", "heslo123", 111);
}
}
In der Methode main wird eine Instanz der Klasse ProxyPristup erstellt, und wir testen, wie unsere Implementierung die Zugriffe der Klienten kontrolliert und protokolliert.
Das Programm gibt Nachrichten über Zugriffe und Zugriffsverweigerungen basierend auf den eingegebenen Zugangsdaten aus. Wenn die Zugangsdaten mit den erwarteten Werten übereinstimmen (Benutzername „admin“ und Passwort „heslo123“), erlaubt der Proxy den Zugriff auf das echte Objekt und führt dessen Operation aus. Die Zugriffszeit wird ebenfalls protokolliert.
Die Ausgabe dieses Beispiels ist:

Das Entwurfsmuster Proxy wird häufig in Situationen verwendet, in denen eine Zugriffskontrolle erforderlich ist und zunächst die Korrektheit der Daten und/oder die Berechtigungen zur Verwendung der Methoden überprüft werden müssen, bevor die Methoden des eigentlichen Objekts aufgerufen werden.
Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausführen kannst. Lade den Java Proxy Code hier herunter.
Beherrschst du die Programmiersprache Java? Wenn du als Java Entwickler auf der Suche nach einem Job bist, informiere dich über unsere Mitarbeiterbenefits und reagiere auf unsere aktuellen Stellenangebote.
Ähnliche Artikel