{"id":3929,"date":"2024-01-29T16:00:06","date_gmt":"2024-01-29T16:00:06","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3929"},"modified":"2025-07-07T11:36:33","modified_gmt":"2025-07-07T11:36:33","slug":"java-mediator","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-mediator\/","title":{"rendered":"Java-Entwurfsmuster: Mediator (design pattern)"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf das n\u00e4chste <strong>Entwurfsmuster <\/strong> (Java <strong>design patterns<\/strong>) aus der Kategorie der Verhaltensmuster (<strong>Behavioral Patterns<\/strong>) &#8211; Mediator. Entwurfsmuster in dieser Kategorie befassen sich mit der Kommunikation<strong>(interaction<\/strong>) zwischen Objekten und ihrer Verantwortung (<strong>responsibility<\/strong>). <\/p>\n<h2>Was ist das Entwurfsmuster Mediator?<\/h2>\n<p> Das Entwurfsmuster <strong>Mediator<\/strong> wird verwendet, um die Kommunikation zwischen Objekten in einem System zu vereinfachen, indem es einen zentralen Punkt f\u00fcr die Kommunikation zwischen Objekten bereitstellt. Mediator spielt die Rolle eines Vermittlers und sorgt daf\u00fcr, dass die Objekte nicht direkt miteinander kommunizieren, wodurch das System leicht erweiterbar und wartbar bleibt. <\/p>\n<h2>Welches Problem l\u00f6st das Mediator Entwurfsmuster?<\/h2>\n<p> Das Problem, das es l\u00f6st, ist, dass in komplexen Systemen die Kommunikation zwischen den Objekten komplex und unklar sein kann. Mit der Anzahl der Klassen oder Objekte steigt die Komplexit\u00e4t der Zusammenh\u00e4nge. Ziel dieses Musters ist es, dass sich die Objekte nicht kennen und somit nicht voneinander abh\u00e4ngig sind und dass die Kommunikation zwischen den Objekten nicht direkt, sondern \u00fcber einen einzigen Vermittler (Mediator) erfolgt. Dies minimiert die Bindung der Objekte aneinander und erleichtert das \u00c4ndern oder Hinzuf\u00fcgen neuer Beziehungen, da die gesamte Kommunikation \u00fcber einen Vermittler l\u00e4uft. <\/p>\n<h2>Pr\u00edklad Mediator implement\u00e1cie v Jave<\/h2>\n<p> Wir werden nun demonstrieren, wie das Entwurfsmuster <strong>Mediator<\/strong> die Kommunikation zwischen Objekten vereinfachen und unn\u00f6tige Abh\u00e4ngigkeiten zwischen ihnen beseitigen kann, indem wir einen einfachen Chatroom programmieren, der die Kommunikation zwischen den Teilnehmern einer Diskussion sowohl \u00fcber \u00f6ffentliche als auch \u00fcber private Nachrichten erm\u00f6glicht. <strong><u>Mediator.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic interface Mediator {\n    void poslatSpravu(Diskuter od, String sprava);\n    void poslatSukromnuSpravu(Diskuter odkoho, Diskuter komu, String sprava);\n}<\/code><\/pre>\n<p> Die <strong>Mediator-Schnittstelle<\/strong> definiert Methoden zum Senden von Nachrichten an alle Teilnehmer einer Diskussion und zum Senden privater Nachrichten an einen bestimmten Teilnehmer. <strong><u>Chat.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\npublic class Chat implements Mediator {\n    private List&lt;Diskuter&gt; diskutujuci;\n\n    public Chat() {\n        this.diskutujuci = new ArrayList&lt;&gt;();\n    }\n\n    public void pridat(Diskuter diskuter) {\n        diskutujuci.add(diskuter);\n    }\n\n    @Override\n    public void poslatSpravu(Diskuter od, String sprava) {\n        for(Diskuter prijmatel : diskutujuci) {\n            \/\/ Poslanie spr\u00e1vy v\u0161etk\u00fdm okrem odosielate\u013ea.\n            if(prijmatel != od) {\n                prijmatel.prijatSpravu(sprava);\n            }\n        }\n    }\n\n    @Override\n    public void poslatSukromnuSpravu(Diskuter od, Diskuter komu, String sprava) {\n        for(Diskuter prijmatel : diskutujuci) {\n            \/\/ Poslanie spr\u00e1vy konkr\u00e9tnemu pr\u00edjmate\u013eovi.\n            if(prijmatel == komu) {\n                prijmatel.prijatSukromnuSpravu(od, sprava);\n            }\n        }\n    }\n}<\/code><\/pre>\n<p> Die Klasse <strong>Chat<\/strong> bietet eine Implementierung der Schnittstelle <strong>Mediator<\/strong>. Es enth\u00e4lt eine Liste der Diskutanten und sorgt daf\u00fcr, dass Nachrichten entweder an alle Teilnehmer oder an bestimmte Personen gesendet werden. <strong><u>Diskuter.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic interface Diskuter {\n    void poslatSpravu(String sprava);\n    void prijatSpravu(String sprava);\n    void poslatSukromnuSpravu(Diskuter komu, String sprava);\n    void prijatSukromnuSpravu(Diskuter odkoho, String sprava);\n}<\/code><\/pre>\n<p> Die <strong>Diskuter-Schnittstelle<\/strong> definiert Methoden zum Senden und Empfangen von \u00f6ffentlichen und privaten Nachrichten. <strong><u>Mitglied.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Clen implements Diskuter {\n    private String meno;\n    private Chat chat;\n\n    public Clen(String meno, Chat chat) {\n        this.meno = meno;\n        this.chat = chat;\n        chat.pridat(this);\n    }\n\n    @Override\n    public void poslatSpravu(String sprava) {\n        System.out.println(meno + &quot; posiela spr\u00e1vu: &quot; + sprava);\n        chat.poslatSpravu(this, sprava);\n    }\n\n    @Override\n    public void prijatSpravu(String sprava) {\n        System.out.println(meno + &quot; prijal\/a spr\u00e1vu: &quot; + sprava);\n    }\n\n    @Override\n    public void poslatSukromnuSpravu(Diskuter komu, String sprava) {\n        System.out.println(meno + &quot; posiela s\u00fakromn\u00fa spr\u00e1vu: &quot; + sprava);\n        chat.poslatSukromnuSpravu(this, komu, sprava);\n    }\n\n    @Override\n    public void prijatSukromnuSpravu(Diskuter odkoho, String sprava) {\n        System.out.println(meno + &quot; prijal\/a s\u00fakromn\u00fa spr\u00e1vu: &quot; + sprava);\n    }\n}<\/code><\/pre>\n<p> Die Klasse <strong>Clen<\/strong> (Member) implementiert die <strong>Diskuter-Schnittstelle<\/strong>. Jedes Mitglied hat einen Namen und einen Chat, dem es hinzugef\u00fcgt wird. Es kann Nachrichten an alle senden, Nachrichten empfangen und private Nachrichten senden. <strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Chat;\nimport designpatterns.Clen;\nimport designpatterns.Diskuter;\n\npublic class Main {\n    public static void main(String[] args) {\n        Chat chat = new Chat();\n        Diskuter clen1 = new Clen(&quot;Jozef&quot;, chat);\n        Diskuter clen2 = new Clen(&quot;Petra&quot;, chat);\n        Diskuter clen3 = new Clen(&quot;Dominik&quot;, chat);\n        Diskuter clen4 = new Clen(&quot;Karolina&quot;, chat);\n        clen1.poslatSpravu(&quot;Ahoj v\u0161etci!&quot;);\n        clen4.poslatSukromnuSpravu(clen1, &quot;Ahoj Jozef!&quot;);\n        clen3.poslatSpravu(&quot;Idete si zahra\u0165 stoln\u00fd futbal?&quot;);\n        clen1.poslatSpravu(&quot;Jasn\u00e9, pre\u010do nie.&quot;);\n        clen2.poslatSpravu(&quot;M\u00e1m pr\u00e1cu, ale jednu si zahr\u00e1m.&quot;);\n        clen4.poslatSpravu(&quot;Ja sa prid\u00e1m.&quot;);\n        clen3.poslatSpravu(&quot;Za min\u00fatku dole.&quot;);\n        clen2.poslatSukromnuSpravu(clen1, &quot;Vyklepeme ich ako rezne :-D&quot;);\n    }\n}<\/code><\/pre>\n<p> Die Klasse <strong>Main<\/strong> erstellt ein Chat-Objekt und f\u00fcgt ihm mehrere Chat-Mitglieder hinzu. Anschlie\u00dfend wird die Funktionalit\u00e4t des Chats demonstriert &#8211; die Kommunikation zwischen Mitgliedern, wie das Senden und Empfangen von Nachrichten, einschlie\u00dflich privater Nachrichten. Zwischen den Objekten (Teilnehmern der Diskussion) gibt es keine direkten Verbindungen, die gesamte Kommunikation erfolgt \u00fcber den Vermittler &#8211; den Chat. Das Hinzuf\u00fcgen neuer Mitglieder zu der Diskussion ist genauso einfach und erh\u00f6ht nicht die Komplexit\u00e4t der Kommunikation. Die Ausgabe dieses Beispiels ist: <img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2639 size-full\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-mediator-410-550.webp\" alt=\"Es gibt keine festen Verbindungen zwischen den Objekten (Diskussionsteilnehmern), die gesamte Kommunikation findet \u00fcber einen Vermittler statt - den Chat. \" width=\"410\" height=\"550\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-mediator-410-550.webp 410w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vystup-z-prikladu-mediator-410-550-224x300.webp 224w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/p>\n<h2>Zusammenfassung<\/h2>\n<p> Das Entwurfsmuster <strong>Mediator<\/strong> wird h\u00e4ufig verwendet, wenn wir die Kommunikation und den Nachrichtenaustausch zwischen Objekten durch eine zentralisierte Kommunikation vereinfachen m\u00f6chten. Die Komplexit\u00e4t des Systems steigt mit der Zunahme der Abh\u00e4ngigkeiten und Beziehungen zwischen den Objekten; dieses Entwurfsmuster hilft, sie erheblich zu reduzieren. Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausf\u00fchren kannst. Lade <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/Mediator.zip\">den Java <strong>Mediator<\/strong> Code hier<\/a> herunter. Wenn du als <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Programmierer<\/a> auf der Suche nach Arbeit bist, informiere dich \u00fcber unsere <a href=\"https:\/\/msg-life.sk\/de\/mitarbeiter-benefits\/\">Mitarbeiterbenefits <\/a> und reagiere auf unsere <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">aktuellen Stellenangebote<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Java Mediator Design Pattern und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":2644,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3929","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\/3929","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=3929"}],"version-history":[{"count":4,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3929\/revisions"}],"predecessor-version":[{"id":8038,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3929\/revisions\/8038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/2644"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}