{"id":3932,"date":"2024-01-05T16:00:13","date_gmt":"2024-01-05T16:00:13","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3932"},"modified":"2025-07-07T11:36:31","modified_gmt":"2025-07-07T11:36:31","slug":"java-chain-of-responsibility","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-chain-of-responsibility\/","title":{"rendered":"Java-Entwurfsmuster (design patterns): Chain of Reponsibility"},"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; Chain of Responsibility. 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 Chain of Responsibility?<\/h2>\n<p> Das Entwurfsmuster <strong>Chain of Responsibility<\/strong> (Verantwortungskette) ist ein Muster, das es mehreren Objekten erm\u00f6glicht, Anfragen zu bearbeiten, ohne dass das Objekt wissen muss, wer sein Nachfolger in der Kette ist. Jedes Objekt in der Kette ist in der Lage, die Anfrage zu bearbeiten, aber wenn es nicht wei\u00df, wie es sie bearbeiten soll, gibt es sie an das n\u00e4chste Objekt in der Kette weiter. <\/p>\n<h2>Welches Problem l\u00f6st das Chain of Responsibility Design Pattern?<\/h2>\n<p> Es l\u00f6st das Problem der Bearbeitung von Anfragen in einer Kette, so dass die Anfrage nicht an ein bestimmtes Objekt gesendet wird, sondern eine Kette von Objekten durchl\u00e4uft, wobei jedes Objekt in der Kette f\u00fcr die Bearbeitung der Anfrage verantwortlich sein kann, aber wenn es die Anfrage nicht bearbeitet, leitet es sie an das n\u00e4chste Objekt in der Kette weiter. Ziel ist es, mehreren Objekten die Bearbeitung einer Anfrage zu erm\u00f6glichen, ohne dass genau festgelegt werden muss, welches Objekt die Anfrage bearbeiten soll. Dadurch wird die Abh\u00e4ngigkeit zwischen dem Sender und dem Empf\u00e4nger der Anfrage verringert. <\/p>\n<h2>Beispiel f\u00fcr die Implementierung des Chain of Responsibility-Musters in Java.<\/h2>\n<p> Jetzt werden wir ein Programm schreiben, das die Genehmigung von Mitarbeiterantr\u00e4gen in einem Unternehmen simuliert und dabei das Entwurfsmuster <strong>Chain of Responsibility<\/strong> verwendet. Das Ziel dieses Musters ist es, mehreren Objekten zu erm\u00f6glichen, eine Anforderung zu verarbeiten, ohne dass wir genau wissen, welches Objekt sie verarbeiten wird. Die Objekte sind in einer Kette angeordnet, und jedes Objekt in der Kette entscheidet, ob es die jeweilige Anforderung verarbeiten kann oder ob es sie an das n\u00e4chste Objekt in der Kette weiterleitet. In diesem Programm gibt es drei Arten von Mitarbeitern &#8211; <strong>Zamestnanec<\/strong>, <strong>Veduci<\/strong> und <strong>Riaditel<\/strong>, von denen jeder eine abstrakte Klasse, <strong>SchvalovatelPoziadavky<\/strong>, implementiert, die gemeinsame Funktionen f\u00fcr alle Mitarbeiter enth\u00e4lt. <strong><u>SchvalovatelPoziadavky.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic abstract class SchvalovatelPoziadavky {\n    String meno;\n    SchvalovatelPoziadavky dalsiSchvalovatel;\n    private SchvalovatelPoziadavky(){\n\n    }\n    public SchvalovatelPoziadavky(String meno){\n        this.meno = meno;\n    }\n    public abstract void nastavitDalsiehoSchvalovatela(SchvalovatelPoziadavky dalsiSchvalovatel);\n\n    public void posuditPoziadavku(String poziadavka)\n    {\n        if(this.dalsiSchvalovatel != null)\n            this.dalsiSchvalovatel.posuditPoziadavku(poziadavka);\n        else\n            System.out.println(poziadavka + &quot; - poziadavka bola zamietnuta!&quot;);\n    }\n}<\/code><\/pre>\n<p> Die abstrakte Klasse <strong>SchvalovatelPoziadavky<\/strong> definiert gemeinsame Methoden und enth\u00e4lt einen Verweis auf den n\u00e4chsten Genehmiger in der Kette. <strong><u>Zamestnanec.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Zamestnanec extends SchvalovatelPoziadavky {\n    public Zamestnanec() {\n        super(&quot;zamestnanec&quot;);\n    }\n    @Override\n    public void nastavitDalsiehoSchvalovatela(SchvalovatelPoziadavky dalsiSchvalovatel) {\n        this.dalsiSchvalovatel = dalsiSchvalovatel;\n    }\n    @Override\n    public void posuditPoziadavku(String poziadavka) {\n        if(poziadavka == &quot;NAVSTEVA_LEKARA&quot;) {\n            System.out.println(poziadavka + &quot; - &quot; + meno + &quot; schvalil poziadavku&quot;);\n        }\n        else {\n            super.posuditPoziadavku(poziadavka);\n        }\n    }\n}<\/code><\/pre>\n<p><strong><u>Veduci.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Veduci extends SchvalovatelPoziadavky {\n    public Veduci() {\n        super(&quot;veduci&quot;);\n    }\n    @Override\n    public void nastavitDalsiehoSchvalovatela(SchvalovatelPoziadavky dalsiSchvalovatel) {\n        this.dalsiSchvalovatel = dalsiSchvalovatel;\n    }\n    @Override\n    public void posuditPoziadavku(String poziadavka) {\n        if(poziadavka == &quot;DOVOLENKA&quot;) {\n            System.out.println(poziadavka + &quot; - &quot; + meno + &quot; schvalil poziadavku&quot;);\n        }\n        else {\n            super.posuditPoziadavku(poziadavka);\n        }\n    }\n}<\/code><\/pre>\n<p><strong><u>Riaditel.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\npublic class Riaditel extends SchvalovatelPoziadavky {\n    public Riaditel() {\n        super(&quot;riaditel&quot;);\n    }\n    @Override\n    public void nastavitDalsiehoSchvalovatela(SchvalovatelPoziadavky dalsiSchvalovatel) {\n        this.dalsiSchvalovatel = dalsiSchvalovatel;\n    }\n    @Override\n    public void posuditPoziadavku(String poziadavka) {\n        if(poziadavka == &quot;ZVYSENIE_PLATU&quot;) {\n            System.out.println(poziadavka + &quot; - &quot; + meno + &quot; schvalil poziadavku&quot;);\n        }\n        else {\n            super.posuditPoziadavku(poziadavka);\n        }\n    }\n}<\/code><\/pre>\n<p><strong>Zamestnanec<\/strong>, <strong>Veduci<\/strong>, <strong>Riaditel<\/strong> sind konkrete Klassen, die die einzelnen Mitarbeiter repr\u00e4sentieren. Jeder von ihnen kann bestimmte Arten von Anfragen genehmigen, aber wenn sie f\u00fcr einige davon nicht autorisiert sind, geben sie diese an den n\u00e4chsten Genehmiger in der Kette weiter. <strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Riaditel;\nimport designpatterns.SchvalovatelPoziadavky;\nimport designpatterns.Veduci;\nimport designpatterns.Zamestnanec;\n\npublic class Main {\n    public static void main(String[] args) {\n        \/\/ Clanky retaze\n        SchvalovatelPoziadavky zamestnanec = new Zamestnanec();\n        SchvalovatelPoziadavky veduci = new Veduci();\n        SchvalovatelPoziadavky riaditel = new Riaditel();\n        \/\/ Vytvorenie retaze zodpovednosti\n        zamestnanec.nastavitDalsiehoSchvalovatela(veduci);\n        veduci.nastavitDalsiehoSchvalovatela(riaditel);\n        \/\/ Posudenie poziadaviek\n        zamestnanec.posuditPoziadavku(&quot;NAVSTEVA_LEKARA&quot;);\n        zamestnanec.posuditPoziadavku(&quot;DOVOLENKA&quot;);\n        zamestnanec.posuditPoziadavku(&quot;ZVYSENIE_PLATU&quot;);\n        zamestnanec.posuditPoziadavku(&quot;FIREMNE_AUTO&quot;);\n    }\n}<\/code><\/pre>\n<p> In der <em>Hauptmethode<\/em> erstellen wir eine Kette von Zust\u00e4ndigkeiten, legen eine Hierarchie einzelner Mitarbeiter an und \u00fcberpr\u00fcfen dann die verschiedenen Antr\u00e4ge. Jeder Mitarbeiter versucht, die Anfrage zu genehmigen. Wenn er sie nicht genehmigen kann, delegiert er sie an den n\u00e4chsten Genehmiger in der Kette. <figure id=\"attachment_2397\" aria-describedby=\"caption-attachment-2397\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2395 size-large\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vysledok-z-prikladu-1150-500-1024x445.webp\" alt=\"In der Methode main erstellen wir die Verantwortungskette, bauen die Hierarchie der einzelnen Mitarbeiter auf und bewerten dann verschiedene Anfragen.\" width=\"640\" height=\"278\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vysledok-z-prikladu-1150-500-1024x445.webp 1024w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vysledok-z-prikladu-1150-500-300x130.webp 300w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vysledok-z-prikladu-1150-500-768x334.webp 768w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/01\/vysledok-z-prikladu-1150-500.webp 1150w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-2397\" class=\"wp-caption-text\">Die Ausgabe dieses Beispiels.<\/figcaption><\/figure><\/p>\n<h2>Zusammenfassung<\/h2>\n<p> Das Entwurfsmuster<strong>Chain of Responsibility<\/strong> wird bei der Softwareentwicklung verwendet, wenn wir eine flexible Art der Bearbeitung von Anfragen erreichen wollen, ohne eine starre Verbindung zwischen dem Absender und dem Bearbeiter der Anfrage herzustellen und sie zur Bearbeitung an eine Kette von Objekten weiterzuleiten. 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\/2024\/01\/ChainOfResponsibility.zip\">Java Code <strong>Chain of Responsibility<\/strong> hier herunter<\/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 reagieren Sie auf unsere <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">aktuellen Stellenangebote<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Chain of Responsibility 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":2400,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3932","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\/3932","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=3932"}],"version-history":[{"count":4,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3932\/revisions"}],"predecessor-version":[{"id":8035,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3932\/revisions\/8035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/2400"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}