{"id":3942,"date":"2023-11-17T08:49:46","date_gmt":"2023-11-17T08:49:46","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3942"},"modified":"2025-10-22T11:28:48","modified_gmt":"2025-10-22T11:28:48","slug":"java-facade","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-facade\/","title":{"rendered":"Java-Entwurfsmuster (design patterns): Facade"},"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; Facade. 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 Facade?<\/h2>\n<p><strong>Facade <\/strong> ist ein Entwurfsmuster, das eine vereinfachte Schnittstelle f\u00fcr die Interaktion mit einem komplexen System bietet, das aus mehreren Klassen, Schnittstellen und Komponenten bestehen kann. Es wird oft in Verbindung mit dem Entwurfsmuster <strong>Singleton <\/strong> verwendet.<\/p>\n<h2>Was f\u00fcr ein Problem l\u00f6st das Entwurfsmuster Facade?<\/h2>\n<p>Das Entwurfsmuster Facade l\u00f6st das Komplexit\u00e4tsproblem, indem es eine einfache, einheitliche Schnittstelle als Ansatz f\u00fcr den Klienten bereitstellt, die die Details im Inneren des Systems verbirgt, das aufgrund der vielen Klassen und Abh\u00e4ngigkeiten schwer zu verstehen und zu navigieren ist. Der Vorteil der Fassade ist auch, dass das komplexe System ver\u00e4ndert werden kann, unabh\u00e4ngig vom Kunden, der nur \u00fcber die Fassade kommuniziert.<\/p>\n<h2>Beispiel einer Facade-Implementierung in Java<\/h2>\n<p>Jetzt werden wir ein Programm schreiben, um die Eigenschaften der gegebenen Zahlen zu testen. Dabei verwenden wir das Entwurfsmuster <strong>Facade<\/strong>, um die Komplexit\u00e4t der Berechnungen vor dem Benutzer zu verbergen.<\/p>\n<p>Die Klasse <strong>SystemA <\/strong> enth\u00e4lt die Methode <em>isPrvocislo()<\/em>, die feststellt, ob die angegebene Zahl eine Primzahl ist. Eine Primzahl ist eine Zahl gr\u00f6\u00dfer als 1, die keine anderen Teiler als 1 und sich selbst hat.<\/p>\n<p><strong><u>SystemA.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class SystemA {\n    public boolean jePrvocislo(int cislo) {\n        if (cislo &lt;= 1) {\n            return false;\n        }\n        for (int i = 2; i &lt;= Math.sqrt(cislo); i++) {\n            if (cislo % i == 0) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n<\/code><\/pre>\n<p>Die Klasse <strong>SystemB <\/strong> enth\u00e4lt die Methode <em>jeFibonacihoCislo()<\/em>, die feststellt, ob die angegebene Zahl zu einer Fibonacci-Folge geh\u00f6rt. Die Fibonacci-Folge ist so beschaffen, dass jede Zahl in der Folge die Summe der beiden vorangegangenen Zahlen ist (z. B. 0, 1, 1, 2, 3, 5, &#8230;).<\/p>\n<p><strong><u>SystemB.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class SystemB {\n    public boolean jeFibonacihoCislo(int cislo) {\n        int a = 0, b = 1, temp;\n        while (a &lt; cislo) {\n            temp = a;\n            a = b;\n            b = temp + b;\n        }\n        return a == cislo;\n    }\n}<\/code><\/pre>\n<p><strong>SystemC <\/strong> enth\u00e4lt die Methode <em>jeOdmocnitelne()<\/em>, die \u00fcberpr\u00fcft, ob eine gegebene Zahl ohne Rest radizierbar ist. Eine Quadratwurzel ist eine Zahl, die mit sich selbst multipliziert das urspr\u00fcngliche Zahl ergibt.<\/p>\n<p><strong><u>SystemC.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class SystemC {\n    public boolean jeOdmocnitelne(int cislo) {\n        if (cislo &lt; 0) {\n            return false;\n        }\n        int odmocnina = (int) Math.sqrt(cislo);\n        return odmocnina * odmocnina == cislo;\n    }\n}\n<\/code><\/pre>\n<p>Die Klasse <strong>Fassade <\/strong> kombiniert die vorhergehenden Systeme und deren Methoden durch die Methode komplexnaOperacia(), die eine gegebene Zahl analysiert und das Ergebnis als Textkette zur\u00fcckgibt.<\/p>\n<p><strong><u>Fasada.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Fasada {\n    private SystemA systemA;\n    private SystemB systemB;\n    private SystemC systemC;\n\n    public Fasada() {\n        systemA = new SystemA();\n        systemB = new SystemB();\n        systemC = new SystemC();\n    }\n\n    public String komplexnaOperacia(int cislo) {\n        StringBuilder vysledok = new StringBuilder(&quot;Fas\u00e1da sp\u00fa\u0161\u0165a anal\u00fdzu \u010d\u00edsla &quot; + cislo + &quot;:\\n&quot;);\n        vysledok.append(&quot;Syst\u00e9m A: Je prvo\u010d\u00edslo? &quot;).append(systemA.jePrvocislo(cislo)).append(&quot;\\n&quot;);\n        vysledok.append(&quot;Syst\u00e9m B: Je Fibona\u010diho \u010d\u00edslo? &quot;).append(systemB.jeFibonacihoCislo(cislo)).append(&quot;\\n&quot;);\n        vysledok.append(&quot;Syst\u00e9m C: D\u00e1 sa \u010d\u00edslo odmocni\u0165? &quot;).append(systemC.jeOdmocnitelne(cislo));\n        return vysledok.toString();\n    }\n}\n<\/code><\/pre>\n<p>Die Klasse <strong>Main <\/strong> ist der Einstiegspunkt in das Programm. Erzeugt eine Instanz der Fassade und nennt deren Methode <em>komplexnaOperacia()<\/em> auf jeder gegebenen Zahl. In diesem Beispiel setzen wir die Zahl auf 1. Das Ergebnis dieser Operation wird dann auf der Konsole angezeigt.<\/p>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Fasada;\n\npublic class Main {\n    public static void main(String[] args) {\n        Fasada fasada = new Fasada();\n        \/\/ M\u00f4\u017ee\u0161 zmeni\u0165 na ak\u00e9ko\u013evek in\u00e9 \u010d\u00edslo\n        int zadaneCislo = 1;\n        String vysledok = fasada.komplexnaOperacia(zadaneCislo);\n        System.out.println(vysledok);\n    }\n}\n<\/code><\/pre>\n<figure id=\"attachment_2295\" aria-describedby=\"caption-attachment-2295\" style=\"width: 500px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1594\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/priklad-1000-580.webp\" alt=\"V\u00fdstup z tohto pr\u00edkladu Main.java\" width=\"500\" height=\"290\"><figcaption id=\"caption-attachment-2295\" class=\"wp-caption-text\">Die Ausgabe des Beispiels Main.java<\/figcaption><\/figure>\n<h2>Zusammenfassung<\/h2>\n<p>Das Entwurfsmuster Facade wird verwendet, wenn wir komplizierten und schwer verst\u00e4ndlichen Code komplexer Systeme verbergen m\u00fcssen. Durch die Einbettung einer Fassade zwischen dem Klienten und dem System kann der Klient leicht mit der Fassade interagieren, die sicherstellt, dass komplexe Operationen korrekt aufgerufen werden und die Details des Systems verbirgt.<\/p>\n<p>Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. Lade den <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/Facade.zip\">Java Code Facade 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 Facade und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":3943,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3942","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\/3942","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=3942"}],"version-history":[{"count":6,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3942\/revisions"}],"predecessor-version":[{"id":9349,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3942\/revisions\/9349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3943"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}