{"id":3934,"date":"2023-12-15T10:10:47","date_gmt":"2023-12-15T10:10:47","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3934"},"modified":"2025-10-22T11:06:09","modified_gmt":"2025-10-22T11:06:09","slug":"java-proxy","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-proxy\/","title":{"rendered":"Java-Entwurfsmuster (design patterns): Proxy"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf das n\u00e4chste <strong>Entwurfsmuster <\/strong> (Java <strong>design patterns<\/strong>) aus der Kategorie der strukturellen Muster (<strong>structural patterns<\/strong>) &#8211; Proxy. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (<strong>inheritance<\/strong>) und Komposition (<strong>composition<\/strong>).<\/p>\n<h2>Was ist das Entwurfsmuster Proxy?<\/h2>\n<p><strong>Proxy <\/strong> ist ein Entwurfsmuster, das den Zugriff auf ein Objekt \u00fcber ein anderes Objekt (Proxy) erm\u00f6glicht und zus\u00e4tzliche Funktionalit\u00e4ten bereitstellt, wie z. B. die \u00dcberpr\u00fcfung von Zugriffsrechten, das Protokollieren von Zugriffen, das verz\u00f6gerte Erstellen ressourcenintensiver Objekte und mehr. Dieses Muster geh\u00f6rt zur Gruppe der strukturellen Muster, da es sich damit besch\u00e4ftigt, wie Objekte zu gr\u00f6\u00dferen Strukturen zusammengesetzt werden.<\/p>\n<h2>Was f\u00fcr ein Problem l\u00f6st das Entwurfsmuster Proxy?<\/h2>\n<p>Proxy l\u00f6st effektiv die F\u00e4lle, in denen wir die Kontrolle \u00fcber den Zugriff auf ein Objekt haben m\u00f6chten. 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\u00fcssen, welche Clients wann auf das betreffende Objekt zugegriffen haben. Proxy erm\u00f6glicht es uns, solche Situationen zu l\u00f6sen, ohne direkten Zugriff auf das Hauptobjekt zu haben. F\u00fcr den Klienten ist die Verwendung eines Proxy-Objekts \u00e4hnlich wie die Verwendung des echten Objekts, da beide dasselbe Interface implementieren, obwohl der Proxy tats\u00e4chlich eine <strong>Wrapper<\/strong>-Klasse des echten Objekts ist.<\/p>\n<h2>Beispiel f\u00fcr die Implementierung des Proxy Musters in Java.<\/h2>\n<p>Wir werden nun ein Programm implementieren, das die Verwendung des Entwurfsmusters <strong>Proxy <\/strong> in Java bei der Anmeldung an einem Informationssystem demonstriert. Das Programm \u00fcberpr\u00fcft auch die Zugriffsrechte und protokolliert den Zugriff.<\/p>\n<p><strong><u>Pristup.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Rozhranie definuj\u00face spolo\u010dn\u00e9 met\u00f3dy pre RealnyPristup a ProxyPristup.\npublic interface Pristup {\n    void vykonajOperaciu(String meno, String heslo, int idKlienta);\n}<\/code><\/pre>\n<p>Das Interface <strong>Pristup <\/strong> definiert die Methode <em>vykonajOperaciu<\/em>, die sowohl f\u00fcr den RealnyPristup als auch f\u00fcr den ProxyPristup gemeinsam ist.<\/p>\n<p><strong><u>RealnyPristup.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ RealnyPristup - skuto\u010dn\u00fd objekt, ktor\u00fd implementuje rozhranie Pristup.\npublic class RealnyPristup implements Pristup {\n    public void vykonajOperaciu(String meno, String heslo, int idKlienta) {\n        System.out.println(&quot;Vykon\u00e1vam oper\u00e1ciu pre klienta s ID: &quot; + idKlienta);\n    }\n}<\/code><\/pre>\n<p>Die Klasse <strong>RealnyPristup<\/strong>, implementiert die Schnittstelle <strong>Pristup<\/strong>. Stellt das echte Objekt dar, das die Operation f\u00fcr den Klienten mit der angegebenen ID tats\u00e4chlich ausf\u00fchrt.<\/p>\n<p><strong><u>ProxyPristup.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.Date;\n\npublic class ProxyPristup  implements Pristup {\n    private RealnyPristup realnyPristup;\n\n    public void vykonajOperaciu(String meno, String heslo, int idKlienta) {\n        logujPristup(idKlienta);\n        if (skontrolujPristupovePrava(meno, heslo)) {\n            if (realnyPristup == null) {\n                realnyPristup = new RealnyPristup();\n                System.out.println(&quot;Pr\u00edstup bol povolen\u00fd.&quot;);\n            }\n            realnyPristup.vykonajOperaciu(meno, heslo, idKlienta);\n        } else {\n            System.out.println(&quot;Nespr\u00e1vne pr\u00edstupov\u00e9 \u00fadaje. Pr\u00edstup bol zamietnut\u00fd!&quot;);\n        }\n    }\n\n    private boolean skontrolujPristupovePrava(String meno, String heslo) {\n        \/\/ Simul\u00e1cia kontrolu pr\u00edstupov\u00fdch pr\u00e1v, m\u00f4\u017eete prida\u0165 vlastn\u00fa logiku\n        return &quot;admin&quot;.equals(meno) &amp;&amp; &quot;heslo123&quot;.equals(heslo);\n    }\n\n    private void logujPristup(int idKlienta) {\n        \/\/ Simul\u00e1cia logovania pr\u00edstupu\n        System.out.println(&quot;Pristup klienta s ID [&quot; + idKlienta + &quot;] do syst\u00e9mu o &quot; + new Date());\n    }\n}<\/code><\/pre>\n<p>Die Klasse<strong>ProxyPristup<\/strong>, implementiert die Schnittstelle <strong>Pristup<\/strong>. Stellt das Proxy-Objekt dar, das die Zugriffsrechte basierend auf Benutzernamen und Passwort \u00fcberpr\u00fcft. Gleichzeitig protokolliert es den Zugriff, und wenn die Zugangsdaten korrekt sind, delegiert es den Methodenaufruf <em>vykonajOperaciu <\/em> an das echte Objekt <strong>RealnyPristup<\/strong>.<\/p>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Pristup;\nimport designpatterns.ProxyPristup;\n\npublic class Main {\n    public static void main(String[] args) throws InterruptedException {\n        \/\/ Pou\u017eitie Proxy\n        Pristup proxy = new ProxyPristup();\n        proxy.vykonajOperaciu(&quot;jwagner&quot;, &quot;heslo123&quot;, 823);\n        System.out.println();\n        Thread.sleep(800);\n        proxy.vykonajOperaciu(&quot;admin&quot;, &quot;heslo1234&quot;, 111);\n        System.out.println();\n        Thread.sleep(700);\n        proxy.vykonajOperaciu(&quot;admin&quot;, &quot;heslo123&quot;, 111);\n    }\n}<\/code><\/pre>\n<p>In der Methode main wird eine Instanz der Klasse <strong>ProxyPristup <\/strong> erstellt, und wir testen, wie unsere Implementierung die Zugriffe der Klienten kontrolliert und protokolliert.<\/p>\n<p>Das Programm gibt Nachrichten \u00fcber Zugriffe und Zugriffsverweigerungen basierend auf den eingegebenen Zugangsdaten aus. Wenn die Zugangsdaten mit den erwarteten Werten \u00fcbereinstimmen (Benutzername \u201eadmin\u201c und Passwort \u201eheslo123\u201c), erlaubt der Proxy den Zugriff auf das echte Objekt und f\u00fchrt dessen Operation aus. Die Zugriffszeit wird ebenfalls protokolliert.<\/p>\n<p>Die Ausgabe dieses Beispiels ist:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2227 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-prikladu-1000-460.webp\" alt=\"In der Methode main wird eine Instanz der Klasse ProxyPristup erstellt.\" width=\"1000\" height=\"460\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-prikladu-1000-460.webp 1000w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-prikladu-1000-460-300x138.webp 300w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-prikladu-1000-460-768x353.webp 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Das Entwurfsmuster Proxy wird h\u00e4ufig in Situationen verwendet, in denen eine Zugriffskontrolle erforderlich ist und zun\u00e4chst die Korrektheit der Daten und\/oder die Berechtigungen zur Verwendung der Methoden \u00fcberpr\u00fcft werden m\u00fcssen, bevor die Methoden des eigentlichen Objekts aufgerufen werden.<\/p>\n<p>Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/Proxy.zip\">Lade den Java Proxy Code hier herunter. <\/a><\/p>\n<p>Beherrschst du die <a href=\"https:\/\/msgprogramator.sk\/java\/\">Programmiersprache Java<\/a>? Wenn du als <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\"> Java Entwickler <\/a> auf der Suche nach einem Job bist, informiere dich \u00fcber unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\">Mitarbeiterbenefits <\/a> und reagiere auf unsere aktuellen <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">Stellenangebote<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Entwurfsmuster Proxy und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":3935,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/comments?post=3934"}],"version-history":[{"count":6,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3934\/revisions"}],"predecessor-version":[{"id":9332,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3934\/revisions\/9332"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3935"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}