{"id":3951,"date":"2023-11-03T09:44:07","date_gmt":"2023-11-03T09:44:07","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3951"},"modified":"2025-07-07T11:36:28","modified_gmt":"2025-07-07T11:36:28","slug":"java-composite","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-composite\/","title":{"rendered":"Java-Entwurfsmuster (design pattern): Composite"},"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; Composite. Entwurfsmuster in dieser Kategorie befassen sich mit Klassenstrukturen wie Vererbung (<strong>inheritance<\/strong>) und Komposition (<strong>composition<\/strong>). Lies mehr \u00fcber weitere Entwurfsmuster \u2013 eine Serie von Entwurfsmustern: <\/p>\n<ul>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-singleton\/\">Entwurfsmuster Singleton<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-builder\/\">Entwurfsmuster Builder<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-prototype\/\">Entwurfsmuster Prototyp<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-factory\/\">Entwurfsmuster Factory<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-abstract-factory\/\">Entwurfsmuster Abstract factory<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-bridge\/\">Entwurfsmuster Bridge<\/a><\/li>\n<\/ul>\n<h2>Was ist das Entwurfsmuster Composite?<\/h2>\n<p> Das Entwurfsmuster <strong>Composite <\/strong> ist ein Entwurfsmuster, mit dem eine Baumstruktur von Objekten erstellt wird, die es dem Klienten erm\u00f6glicht, mit einzelnen Objekten und ihren Gruppierungen (Composites) auf dieselbe Weise zu arbeiten, da sie dieselbe Schnittstelle haben. <\/p>\n<h2>Welches Problem wird durch das Entwurfsmuster Composite gel\u00f6st?<\/h2>\n<p> Bei der Arbeit mit Baumstrukturen m\u00fcssen Programmierer oft zwischen einem Blattknoten und einem Zweig unterscheiden. Das macht den Code komplexer und damit fehleranf\u00e4lliger. Die L\u00f6sung ist eine Schnittstelle, mit der komplexe und primitive Objekte einheitlich behandelt werden k\u00f6nnen. Das Problem, das Composite l\u00f6st, ist die Notwendigkeit, mit Objekten und ihren Zusammensetzungen auf einheitliche Weise zu arbeiten. Dadurch kann der Klient die gesamte Baumstruktur rekursiv durchlaufen und bearbeiten, ohne zwischen einzelnen Objekten und deren Gruppierungen unterscheiden zu m\u00fcssen. <\/p>\n<h2>Beispiel einer Composite Implementierung in Java<\/h2>\n<p> Jetzt werden wir zeigen, wie man das Composite Muster in Java implementiert. Wir werden eine komplexe Baumstruktur erstellen, die sowohl aus einzelnen Objekten (Bl\u00e4ttern) als auch aus Kompositionen von Objekten (Zweigen) besteht. Durch die Verwendung des Composite Musters erreichen wir eine einheitliche Ausf\u00fchrung von Operationen auf einzelnen Teilen des Baums, unabh\u00e4ngig vom Typ. Die Schnittstelle <em>CastStromu<\/em> stellt eine gemeinsame Schnittstelle sowohl f\u00fcr Blattknoten<em>(List<\/em>) als auch f\u00fcr zusammengesetzte Knoten<em>(Vetva<\/em>) dar. Diese Schnittstelle definiert die Methode <em>vykonajOperaciu()<\/em>, die der Schl\u00fcssel zu diesem Muster ist. <strong><u>CastStromu.java<\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ CastStromu - rozhranie pre v\u0161etky objekty v strome\npublic interface CastStromu {\n    void vykonajOperaciu();\n}<\/code><\/pre>\n<p> Die Klasse <em>List <\/em> stellt eine Listenkomponente in einer Hierarchie dar. Implementiert die Schnittstelle <em>CastStromu<\/em> und bietet eine Implementierung der Methode <em>vykonajOperaciu()<\/em>. Blattkomponenten haben keine untergeordneten Elemente und f\u00fchren Operationen aus. <strong><u>List.java<\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ List - konkr\u00e9tna \u010das\u0165 stromu reprezentuj\u00faca list v strome\npublic class List implements CastStromu {\n    private String id;\n\n    public List(String id) {\n        this.id = id;\n    }\n\n    public void vykonajOperaciu() {\n        System.out.println(&quot;Vykon\u00e1vam oper\u00e1ciu na liste s n\u00e1zvom: &quot; + id);\n    }\n}<\/code><\/pre>\n<p> Die Klasse <em>Vetva <\/em> repr\u00e4sentiert eine zusammengesetzte Komponente in der Hierarchie. Sie implementiert auch die Schnittstelle <em>CastStromu<\/em> und verwaltet eine Sammlung <em>(castiStromu<\/em>) von untergeordneten Komponenten, die entweder Blattkomponenten oder andere zusammengesetzte Komponenten sein k\u00f6nnen. Die Methode <em>pridajCast()<\/em> erm\u00f6glicht das Hinzuf\u00fcgen von untergeordneten Komponenten und damit den Aufbau einer hierarchischen Struktur. <strong><u>Vetva.java<\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.ArrayList;\n\n\/\/ Konkr\u00e9tna \u010das\u0165 stromu reprezentuj\u00faca vetvu v strome\npublic class Vetva implements CastStromu {\n    private String id;\n    private java.util.List&lt;CastStromu&gt; castiStromu = new ArrayList&lt;&gt;();\n\n    public Vetva(String id) {\n        this.id = id;\n    }\n\n    public void pridajCast(CastStromu cast) {\n        castiStromu.add(cast);\n    }\n\n    public void vykonajOperaciu() {\n        System.out.println(&quot;Vykon\u00e1vam oper\u00e1ciu na vetve s n\u00e1zvom: &quot; + id);\n        for (CastStromu cast : castiStromu) {\n            cast.vykonajOperaciu();\n        }\n    }\n}<\/code><\/pre>\n<p> In der main-Methode wird eine Instanz der Wurzelkomponente (kmenovaVetva) erstellt, und es werden ihr untergeordnete Komponenten hinzugef\u00fcgt (sowohl Blattkomponenten als auch zusammengesetzte Komponenten). Wenn die Methode <em>vykonajOperaciu()<\/em> auf der Wurzelkomponente (kmenovaVetva) aufgerufen wird, ruft sie rekursiv die Methode <em>vykonajOperaciu()<\/em> auf allen untergeordneten Komponenten auf, was dazu f\u00fchrt, dass Operationen auf der gesamten Struktur ausgef\u00fchrt werden. <strong><u>Main.java<\/u><\/strong> <\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.*;\n\npublic class Main {\n    public static void main(String[] args) {\n        \/\/ Vytvor\u00ed strom z listov a vetiev\n        System.out.println(&quot;Sklad\u00e1m strom z kme\u0148a, listov a vetiev.&quot;);\n        List list1 = new List(&quot;List 1&quot;);\n        List list2 = new List(&quot;List 2&quot;);\n        List list3 = new List(&quot;List 3&quot;);\n\n        Vetva vetva1 = new Vetva(&quot;Vetva 1&quot;);\n        vetva1.pridajCast(list1);\n        vetva1.pridajCast(list2);\n\n        Vetva vetva2 = new Vetva(&quot;Vetva 2&quot;);\n        vetva2.pridajCast(list3);\n\n        Vetva kmenovaVetva = new Vetva(&quot;Kme\u0148&quot;);\n        kmenovaVetva.pridajCast(vetva1);\n        kmenovaVetva.pridajCast(vetva2);\n\n        \/\/ Vykon\u00e1va oper\u00e1ciu na celej stromovej \u0161trukt\u00fare\n        kmenovaVetva.vykonajOperaciu();\n    }\n}<\/code><\/pre>\n<p> Die Ausgabe dieses Beispiels ist: <figure id=\"attachment_3955\" aria-describedby=\"caption-attachment-3955\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1561\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/main-java-vystup-prikladu-800-470.webp\" alt=\"Java Code Ausgabe aus dem Composite Beispiel\" width=\"800\" height=\"470\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/main-java-vystup-prikladu-800-470.webp 800w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/main-java-vystup-prikladu-800-470-300x176.webp 300w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/11\/main-java-vystup-prikladu-800-470-768x451.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-3955\" class=\"wp-caption-text\">Code-Ausgabe<\/figcaption><\/figure><\/p>\n<h2>Java Composite Zusammenfassung<\/h2>\n<p> Das Entwurfsmuster Composite wird in Situationen verwendet, in denen es notwendig ist, einheitlich mit einzelnen Objekten und deren Gruppierungen zu arbeiten. 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\/Composite.zip\">Java Composite Code hier herunter <\/a> .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Entwurfsmuster Composite und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":3952,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3951","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\/3951","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=3951"}],"version-history":[{"count":5,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3951\/revisions"}],"predecessor-version":[{"id":4420,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3951\/revisions\/4420"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3951"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3951"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}