{"id":3543,"date":"2023-08-31T14:00:27","date_gmt":"2023-08-31T14:00:27","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3543"},"modified":"2025-07-07T11:36:26","modified_gmt":"2025-07-07T11:36:26","slug":"java-abstract-factory","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-abstract-factory\/","title":{"rendered":"Java-Entwurfsmuster (design pattern): Abstract Factory"},"content":{"rendered":"<p>In diesem Artikel werden wir uns das letzte <strong>Entwurfsmuster<\/strong> (J<strong>ava design pattern<\/strong>) aus der Kategorie der Muster zur Erstellung von Objekten <strong>(creational patterns<\/strong>) ansehen &#8211; Abstract Factory. Lies mehr \u00fcber weitere Design Patterns \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-adapter\/\">Entwurfsmuster Adapter<\/a><\/li>\n<\/ul>\n<h2>Was ist das Entwurfsmuster Abstract Factory?<\/h2>\n<p> Das Entwurfsmuster <em>Abstract Factory<\/em> ist eines der sogenannten kreativen (creational) Entwurfsmuster im Software Engineering. Das Ziel dieses Musters ist es, eine Schnittstelle f\u00fcr die Erstellung von Familien verwandter Objekte bereitzustellen, ohne dass deren spezifische Klassen angegeben werden m\u00fcssen. <\/p>\n<h2>Welches Problem l\u00f6st das Entwurfsmuster Abstract Factory?<\/h2>\n<p> Abstract Factory l\u00f6st das Problem der Erstellung von Instanzen von Klassen, die eine gemeinsame Schnittstelle haben oder zur selben Klassenfamilie geh\u00f6ren. Das Entwurfsmuster <em>Abstract Factory<\/em> basiert auf dem Prinzip der Abstraktion. Bietet eine Schnittstelle, die Methoden zur Erstellung von Objekten definiert. Spezifische Implementierungen dieser Schnittstelle werden durch einzelne Fabriken repr\u00e4sentiert, die Instanzen bestimmter Klassen erstellen. Es hilft, den Prozess der Objekterstellung von deren Verwendung zu trennen und erm\u00f6glicht den einfachen Austausch einer gesamten Objektfamilie gegen eine andere, ohne den Code \u00e4ndern zu m\u00fcssen, der diese Objekte verwendet. <\/p>\n<h2>Beispiel einer Implementierung des Abstract Factory Entwurfsmusters in Java<\/h2>\n<p> Nun zeigen wir, wie das Entwurfsmuster <em>Abstract Factory <\/em>in Java implementiert wird. Dieses Beispiel veranschaulicht, wie das <em>Abstract Factory<\/em> Entwurfsmuster die Erstellung von Familien zusammenh\u00e4ngender Objekte erm\u00f6glicht, ohne ihre konkreten Klassen im Code anzugeben. In diesem Fall handelt es sich um eine Schokoladen- und Nougatfabrik des Herstellers Lindt. Schnittstelle <u>CokoladaAbstractFactory<\/u> &#8211; definiert zwei Methoden vyrobCokoladu() a vyrobNugat(), die Objekte vom Typ Cokolada und Nugat der entsprechenden Fabriken zur\u00fcckgeben sollen. Diese Schnittstelle stellt eine abstrakte Schokoladenfabrik dar. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Rozhranie pre abstraktnu vyrobnu cokoladu\npublic interface CokoladaAbstractFactory {\n    Cokolada vyrobCokoladu();\n    Nugat vyrobNugat();\n}\n<\/code><\/pre>\n<p> Klasse <u>LindtFactory<\/u> &#8211; implementiert die Schnittstelle ChocolateAbstractFactory und bietet Implementierungen der Methoden makeChocolate() und makeNugat(). Diese Klasse ist eine konkrete Implementierung der abstrakten Schokoladenfabrik f\u00fcr den Hersteller Lindt. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Vyrobca Lindt cokolady implementuje AbstractFactory\npublic class LindtFactory implements CokoladaAbstractFactory {\n    public Cokolada vyrobCokoladu() {\n        return new LindtCokolada();\n    }\n\n    public Nugat vyrobNugat() {\n        return new LindtNugat();\n    }\n}\n<\/code><\/pre>\n<p> <u>InterfaceChocolate<\/u> &#8211; definiert die Methode displayType(), die in der Klasse LindtChocolate implementiert ist. Diese Schnittstelle stellt eine Art von Schokolade dar. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Rozhranie pre cokoladu\npublic interface Cokolada {\n    void zobrazTyp();\n}\n<\/code><\/pre>\n<p> Klasse <u>LindtChocolate<\/u> &#8211; implementiert die Schnittstelle Chocolate und definiert eine displayType()-Methode, die Informationen \u00fcber die Schokolade ausgibt. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Konkretna implementacia Lindt cokolady\npublic class LindtCokolada implements Cokolada {\n    public void zobrazTyp() {\n        System.out.println(&quot;Lindt \u010dokol\u00e1da&quot;);\n    }\n}\n<\/code><\/pre>\n<p> <u>Nugat-Schnittstelle<\/u> &#8211; definiert eine displayType()-Methode, die in der Klasse LindtNugat implementiert ist. Diese Schnittstelle stellt die Art des Nugats dar. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Rozhranie pre nugat\npublic interface Nugat {\n    void zobrazTyp();\n}\n<\/code><\/pre>\n<p> Klasse <u>LindtNugat<\/u> &#8211; implementiert die Schnittstelle Nugat und definiert eine displayType()-Methode, die Informationen \u00fcber den Nougat ausgibt. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Konkretna implementacia Lindt nugatu\npublic class LindtNugat implements Nugat {\n    public void zobrazTyp() {\n        System.out.println(&quot;Lindt nug\u00e1t&quot;);\n    }\n}\n<\/code><\/pre>\n<p> Klasse <u>Main<\/u>: Enth\u00e4lt die main()-Methode, in der die Verwendung der abstrakten Fabrik demonstriert wird.    Es wird eine LindtFactory-Instanz erstellt, die vom Typ CokoladaAbstractFactory ist. Anschlie\u00dfend werden die Objekte Cokolada und Nugat mithilfe dieser abstrakten Fabrik erstellt. Schlie\u00dflich werden die showType()-Methoden auf diesen Objekten aufgerufen, die die Informationen zu Schokolade und Nougat ausgeben. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Cokolada;\nimport designpatterns.CokoladaAbstractFactory;\nimport designpatterns.LindtFactory;\nimport designpatterns.Nugat;\n\n\/\/ Priklad pouzitia Abstract Factory\npublic class Main {\n    public static void main(String[] args) {\n        \/\/ Vytvorenie abstraknej tovarne na cokoladu\n        CokoladaAbstractFactory cokoladaFactory = new LindtFactory();\n\n        \/\/ Vyroba cokolady a nugatu pomocou abstraktnej tovarne\n        Cokolada cokolada = cokoladaFactory.vyrobCokoladu();\n        Nugat nugat = cokoladaFactory.vyrobNugat();\n\n        \/\/ A zobrazenie informacii o nich\n        cokolada.zobrazTyp();\n        nugat.zobrazTyp();\n    }\n}\n<\/code><\/pre>\n<p> Beachte, dass durch die Verwendung vom Abstract Factory die Instanz von LindtFactory problemlos gegen eine andere Instanz ausgetauscht werden kann, die das CokoladaAbstractFactory-Interface implementiert, ohne den restlichen Code \u00e4ndern zu m\u00fcssen. Wir k\u00f6nnten zum Beispiel eine MilkaFactory erstellen, um Milchschokolade zu produzieren. <figure id=\"attachment_3548\" aria-describedby=\"caption-attachment-3548\" style=\"width: 390px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1328\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/abtract-factory-vystup.png\" alt=\"Programmausgabe mit dem Entwurfsmuster Abstract Factory\" width=\"390\" height=\"176\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/abtract-factory-vystup.png 390w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/abtract-factory-vystup-300x135.png 300w\" sizes=\"auto, (max-width: 390px) 100vw, 390px\" \/><figcaption id=\"caption-attachment-3548\" class=\"wp-caption-text\">Programmausgabe mit dem Entwurfsmuster Abstract Factory<\/figcaption><\/figure> Wir haben Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den Sie direkt in Java ausf\u00fchren k\u00f6nnen. <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/AbstractFactory.zip\">Laden Sie den Java Abstract Factory Code hier herunter.<\/a> Wenn Sie auf der Suche nach einem Job sind und <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Programmierer<\/a> sind, lesen Sie mehr \u00fcber das <a href=\"https:\/\/msgprogramator.sk\/de\/softwareentwickler-gehalt\/\">Gehalt von Programmierern<\/a> und sehen Sie sich unsere <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/\">Stellenangebote <\/a>an.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Entwurfsmuster Abstract Factory und wof\u00fcr wird es verwendet? Lies unseren neuen Artikel und lade den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":3546,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3543","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\/3543","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=3543"}],"version-history":[{"count":7,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3543\/revisions"}],"predecessor-version":[{"id":8019,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3543\/revisions\/8019"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3546"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}