{"id":3514,"date":"2023-08-25T16:05:57","date_gmt":"2023-08-25T16:05:57","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=3514"},"modified":"2025-07-07T11:36:30","modified_gmt":"2025-07-07T11:36:30","slug":"java-factory","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-factory\/","title":{"rendered":"Java-Entwurfsmuster (design pattern): Factory"},"content":{"rendered":"<p>In diesem Artikel werden wir uns ein weiteres Java <strong>Entwurfsmuster<\/strong> (<strong>Java design pattern<\/strong>) aus der Kategorie der Muster f\u00fcr die Erstellung von Objekten <strong>(Kreationsmuster<\/strong>) ansehen &#8211; 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-abstract-factory\/\">Entwurfsmuster Abstract Factory<\/a><\/li>\n<li><a href=\"https:\/\/msgprogramator.sk\/de\/java-adapter\/\">Entwurfsmuster Adapter<\/a><\/li>\n<\/ul>\n<h2>Was ist Factory Entwurfsmuster?<\/h2>\n<p><em>Design Pattern<\/em> <strong>Factory<\/strong> ist ein Software Entwurfsmuster, dessen Hauptziel es ist, einen einfachen und flexiblen Weg zur Erstellung von Klasseninstanzen zu bieten, ohne dass bestimmte Klassen direkt im Client-Code angegeben werden m\u00fcssen. <\/p>\n<h2>Welches Problem wird durch das Factory Entwurfsmuster gel\u00f6st?<\/h2>\n<p> Wenn wir Klassen haben, die eine gemeinsame Schnittstelle implementieren oder davon abgeleitet sind, m\u00f6chten wir Instanzen dieser Klassen erstellen k\u00f6nnen, ohne eine bestimmte Klasse direkt erw\u00e4hnen zu m\u00fcssen. Das ist n\u00fctzlich, wenn wir nicht m\u00f6chten, dass der Client-Code an eine konkrete Implementierung gebunden ist, sondern ein Objekt basierend auf einem bestimmten Parameter oder einer Bedingung erhalten m\u00f6chten. <\/p>\n<h2>Beispiel einer Factory Implementierung in Java<\/h2>\n<p> Nun zeigen wir, wie man das Factory Muster in Java implementiert. Dieses Beispiel zeigt, wie das Factory-Muster es erm\u00f6glicht, verschiedene Objekttypen (Schokoladen) mithilfe einer einzigen Factory-Klasse zu erstellen, ohne dass im Client-Code die konkreten Klassen direkt angegeben werden m\u00fcssen. <strong><u>Chocolate.java<\/u><\/strong>: In diesem Beispiel haben wir eine abstrakte Klasse Chocolate erstellt, die Schokolade repr\u00e4sentiert. <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Abstract class representing chocolate\npublic abstract class Chocolate {\n    public abstract void taste();\n}<\/code><\/pre>\n<p> <strong><u>Milka.java, Lindt.java<\/u><\/strong>Anschlie\u00dfend haben wir zwei konkrete Klassen Milka und Lindt implementiert, die die abstrakte Klasse Chocolate erweitern. Jede dieser Klassen definiert ihre eigene Implementierung der Methode ochutnat(). <\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Concrete implementation of Lindt brand chocolate\npublic class Lindt extends Chocolate {\n    @Override\n    public void taste() {\n        System.out.println(&quot;Lindt: Velvety and luxurious taste&quot;);\n    }\n}\n\n\/\/ Concrete implementation of Milka brand chocolate\npublic class Milka extends Chocolate {\n    @Override\n    public void taste() {\n        System.out.println(&quot;Milka: Sweet and milky taste&quot;);\n    }\n}<\/code><\/pre>\n<p> <strong><u>C<\/u><\/strong><strong><u>hocolateFactory.java<\/u><\/strong>: Anschlie\u00dfend haben wir die Klasse ChocolateFactory erstellt, die verwendet wird, um Schokoladeninstanzen basierend auf der Marke zu erzeugen. Die Methode makeChocolate(String znacka) erstellt eine Schokolade basierend auf dem \u00fcbergebenen Parameter znacka. Wenn die Marke <em>Milka <\/em> ist, wird eine Instanz der Klasse <em>Milka <\/em> erstellt. Wenn die Marke <em>Lindt <\/em> ist, wird eine Instanz der Klasse <em>Lindt <\/em> erstellt. Wenn eine unbekannte Marke angegeben wird, wird eine <em>IllegalArgumentException<\/em> ausgel\u00f6st.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\n\/\/ Factory class for chocolate production\npublic class ChocolateFactory {\n    public Chocolate makeChocolate(String brand) {\n        if(brand.equalsIgnoreCase(&quot;Milka&quot;)) {\n            return new Milka();\n        }\n        else if(brand.equalsIgnoreCase(&quot;Lindt&quot;)) {\n            return new Lindt();\n        }\n        else {\n            throw new IllegalArgumentException(&quot;Unknown chocolate brand: &quot; + brand);\n        }\n    }\n}<\/code><\/pre>\n<p> <strong><u>Main.java<\/u><\/strong>: Im Client-Code haben wir eine Instanz von ChocolateFactory erstellt und damit Schokolade der Marken Milka und Lindt erzeugt und probiert.<\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.*;\n\n\/\/ Example\npublic class Main {\n    public static void main(String[] args) {\n        ChocolateFactory factory = new ChocolateFactory();\n\n        \/\/ Making and tasting of Milka brand chocolate\n        Chocolate milka = factory.makeChocolate(&quot;Milka&quot;);\n        milka.taste();\n\n        \/\/ Making and tasting of Lindt brand chocolate\n        Chocolate lindt = factory.makeChocolate(&quot;Lindt&quot;);\n        lindt.taste();\n    }\n}<\/code><\/pre>\n<p> Programmausgabe <figure id=\"attachment_4397\" aria-describedby=\"caption-attachment-4397\" style=\"width: 440px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4395\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/Factory-design-pattern-eng-output.webp\" alt=\"Entwurfsmuster Factory Programmausgabe\" width=\"440\" height=\"174\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/Factory-design-pattern-eng-output.webp 440w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/08\/Factory-design-pattern-eng-output-300x119.webp 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><figcaption id=\"caption-attachment-4397\" class=\"wp-caption-text\">Ausgabe des Beispieles Factory<\/figcaption><\/figure> Wir haben die Dateien mit dem oben genannten Java Factory Beispiel in Form von Code vorbereitet, den Sie direkt in Java ausf\u00fchren k\u00f6nnen. <a href=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2024\/09\/Factory_Eng.zip\">Laden Sie den Code hier herunter.<\/a> Wenn Sie als <a href=\"https:\/\/msg-life.sk\/de\/stellenangebote\/java-entwickler-senior\/\">Java-Programmierer<\/a> auf der Suche nach einem Job 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\/\">aktuellen Stellenausschreibungen an<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel erf\u00e4hrst du, was das Factory Design Pattern ist und wie man es erstellt.<\/p>\n","protected":false},"author":14,"featured_media":3517,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-3514","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\/3514","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=3514"}],"version-history":[{"count":8,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3514\/revisions"}],"predecessor-version":[{"id":8033,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/3514\/revisions\/8033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/3517"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=3514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=3514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=3514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}