{"id":2320,"date":"2023-12-22T10:10:10","date_gmt":"2023-12-22T10:10:10","guid":{"rendered":"https:\/\/msgprogramator.sk\/?p=2320"},"modified":"2025-07-07T11:36:31","modified_gmt":"2025-07-07T11:36:31","slug":"java-flyweight","status":"publish","type":"post","link":"https:\/\/msgprogramator.sk\/de\/java-flyweight\/","title":{"rendered":"Java-Entwurfsmuster (Entwurfsmuster): Flyweight"},"content":{"rendered":"<p>Heute werfen wir einen Blick auf ein weiteres <strong>Flyweight-Entwurfsmuster<\/strong> ( <strong>Java-Entwurfsmuster<\/strong>) aus der Kategorie der<strong>Strukturmuster<\/strong>. Entwurfsmuster dieser Kategorie befassen sich mit Klassenstrukturen wie<strong>Vererbung<\/strong> und<strong>Komposition<\/strong>.<\/p>\n<h2>Was ist das Flyweight-Entwurfsmuster?<\/h2>\n<p><strong>Flyweight<\/strong> ist ein Entwurfsmuster, das in erster Linie dazu dient, die Anzahl der erstellten Objekte zu reduzieren, da es versucht, vorhandene Objekte mit denselben oder \u00e4hnlichen Eigenschaften auf Klassenebene wiederzuverwenden und nur dann ein neues Objekt zu erstellen, wenn kein passendes Objekt gefunden wird. Dadurch wird der Speicherbedarf f\u00fcr Daten, die von \u00e4hnlichen Objekten gemeinsam genutzt werden, minimiert.<\/p>\n<h2>Welches Problem l\u00f6st das Flyweight-Entwurfsmuster?<\/h2>\n<p>Es l\u00f6st das Problem in Anwendungen, die mit einer gro\u00dfen Anzahl von Objekten arbeiten, die viel Speicherplatz ben\u00f6tigen w\u00fcrden, wenn sie separat gespeichert w\u00fcrden, und die Kosten f\u00fcr ihre Erstellung sind nicht unerheblich. Dieses Muster l\u00f6st das Problem, indem es gemeinsame Daten extrahiert und sie zwischen den Objekten austauscht, wodurch der ben\u00f6tigte Speicherplatz reduziert und bereits erstellte Objekte genutzt werden.<\/p>\n<h2>Beispiel f\u00fcr die Implementierung von Flyweight in Java<\/h2>\n<p>Wir werden nun ein Programm schreiben, um ein einfaches System f\u00fcr den Betrieb eines Pizzarestaurants zu simulieren, und wir werden demonstrieren, wie man mit Hilfe des <strong>Flyweight-Entwurfsmusters<\/strong> Instanzen von Pizza effizient gemeinsam nutzen und die Anzahl der erstellten Objekte minimieren kann. Das Programm erstellt eine Pizzeria, nimmt Bestellungen f\u00fcr verschiedene Pizzasorten entgegen und serviert sie. Sie besteht aus den Klassen <em>Pizza<\/em>, <em>Bestellung<\/em> und <em>Pizzeria<\/em> und <em>Hauptklasse<\/em>.<\/p>\n<p><strong><u>Pizza.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Pizza {\n    private static Map&lt;String, Pizza&gt; pizzaCache = new HashMap&lt;&gt;();\n    private String nazov;\n\n    private Pizza(String nazov) {\n        this.nazov = nazov;\n    }\n\n    public static Pizza intern(String nazov) {\n        pizzaCache.putIfAbsent(nazov, new Pizza(nazov));\n        return pizzaCache.get(nazov);\n    }\n\n    public static int pocetDruhov() {\n        return pizzaCache.size();\n    }\n\n    @Override\n    public String toString() {\n        return nazov;\n    }\n}<\/code><\/pre>\n<p>Die Klasse <strong>Pizza<\/strong> repr\u00e4sentiert einen Pizzatyp und verwendet das Flyweight-Muster, um Instanzen von Pizzen mit demselben Namen gemeinsam zu nutzen. Es hat eine <em>intern()<\/em>-Methode, die eine neue Pizza nur dann erstellt, wenn sie noch nicht existiert, und eine <em>pocetSpecies()<\/em>-Methode, die die Anzahl der verschiedenen Pizzasorten zur\u00fcckgibt.<\/p>\n<p><strong><u>Bestellung.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Objednavka {\n    private Pizza pizza;\n    private int cisloStolu;\n\n    private Objednavka(Pizza pizza, int cisloStolu) {\n        this.pizza = pizza;\n        this.cisloStolu = cisloStolu;\n    }\n\n    public static Objednavka create(String nazov, int cisloStolu) {\n        Pizza pizza = Pizza.intern(nazov);\n        return new Objednavka(pizza, cisloStolu);\n    }\n\n    @Override\n    public String toString() {\n        return &quot;Posielam pizzu &quot; + pizza + &quot; na stol &quot; + cisloStolu;\n    }\n}<\/code><\/pre>\n<p>Die Klasse <strong>Order<\/strong> stellt eine Pizzabestellung dar. Jede Bestellung enth\u00e4lt einen Link zu einer bestimmten Pizza und die Tischnummer, an die die Pizza geliefert werden soll.<\/p>\n<p><strong><u>Pizzeria.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">package designpatterns;\n\npublic class Pizzeria {\n    private java.util.List&lt;Objednavka&gt; objednavky = new java.util.ArrayList&lt;&gt;();\n\n    public void prijatObjednavku(String druh, int cisloStolu) {\n        objednavky.add(Objednavka.create(druh, cisloStolu));\n    }\n\n    public void obsluzit() {\n        for (Objednavka order : objednavky) {\n            System.out.println(order);\n        }\n    }\n\n    public int pocetPrijatychObjednavok() {\n        return objednavky.size();\n    }\n}<\/code><\/pre>\n<p>Die Klasse <strong>Pizzeria<\/strong> stellt eine Pizzeria dar, die Bestellungen annimmt und Methoden zur Bearbeitung und Auflistung von Bestellungen bereitstellt. Sie bietet auch eine Methode, um die Anzahl der eingegangenen Bestellungen zu ermitteln.<\/p>\n<p><strong><u>Main.java<\/u><\/strong><\/p>\n<pre><code class=\"language-java\" data-line=\"\">import designpatterns.Pizzeria;\nimport designpatterns.Pizza;\n\npublic class Main {\n    public static void main(String[] args) {\n        Pizzeria pizzeria = new Pizzeria();\n        pizzeria.prijatObjednavku(&quot;Hawai&quot;, 2);\n        pizzeria.prijatObjednavku(&quot;Quattro Formaggi&quot;, 1);\n        pizzeria.prijatObjednavku(&quot;Margherita&quot;, 1);\n        pizzeria.prijatObjednavku(&quot;Napoletana&quot;, 5);\n        pizzeria.prijatObjednavku(&quot;Hawai&quot;, 4);\n        pizzeria.prijatObjednavku(&quot;Quattro Formaggi&quot;, 3);\n        pizzeria.prijatObjednavku(&quot;Margherita&quot;, 3);\n        pizzeria.prijatObjednavku(&quot;Hawai&quot;, 3);\n        pizzeria.prijatObjednavku(&quot;Margherita&quot;, 6);\n        pizzeria.prijatObjednavku(&quot;Quattro Formaggi&quot;, 2);\n        pizzeria.obsluzit();\n        System.out.println();\n        System.out.println(&quot;Pocet prijatych objednavok: &quot; + pizzeria.pocetPrijatychObjednavok());\n        System.out.println(&quot;Pocet pouzitych objektov typu pizza: &quot; + Pizza.pocetDruhov());\n    }\n}<\/code><\/pre>\n<p>In der <em>Hauptmethode<\/em> wird eine Pizzeria-Instanz erstellt und dann werden verschiedene Pizzabestellungen erstellt. Alle Bestellungen werden serviert, und schlie\u00dflich werden die Anzahl der eingegangenen Bestellungen und die Anzahl der verwendeten <strong>Pizza-Objekte<\/strong> aufgelistet. Wir haben also die gemeinsame Nutzung von pizza\u00e4hnlichen Gegenst\u00e4nden durch unterschiedliche Orden nachgewiesen.<\/p>\n<p>Die Ausgabe dieses Beispiels ist:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2251\" src=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-z-prikladu-950-730.webp\" alt=\"Screenshot der Ausgabe des Beispiels\" width=\"950\" height=\"730\" srcset=\"https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-z-prikladu-950-730.webp 950w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-z-prikladu-950-730-300x231.webp 300w, https:\/\/msgprogramator.sk\/wp-content\/uploads\/2023\/12\/vystup-z-prikladu-950-730-768x590.webp 768w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Das <strong>Flyweight-Entwurfsmuster<\/strong> wird in Situationen verwendet, in denen wir \u00e4hnliche Objektinstanzen zwischenspeichern und wiederverwenden m\u00fcssen. Sie zielt haupts\u00e4chlich darauf ab, den Overhead bei der Erstellung von Objekten und deren Speicherbedarf zu optimieren.<\/p>\n<p>Wir haben die 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\/12\/Flyweight.zip\">Laden Sie den Java-Flyweight-Code hier herunter.<\/a><\/p>\n<p>Wenn Sie als <a href=\"https:\/\/msg-life.sk\/praca\/java-programator-senior\/\">Java-Programmierer<\/a> auf der Suche nach Arbeit sind, informieren Sie sich \u00fcber unsere <a href=\"https:\/\/msg-life.sk\/benefity\/\">Unternehmensvorteile<\/a> und reagieren Sie auf unsere <a href=\"https:\/\/msg-life.sk\/praca\/\">aktuellen Stellenangebote<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist das Flyweight-Entwurfsmuster und wof\u00fcr wird es verwendet? Lesen Sie unseren neuen Artikel und laden Sie den Beispielcode herunter.<\/p>\n","protected":false},"author":14,"featured_media":2322,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[62],"tags":[],"class_list":["post-2320","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\/2320","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=2320"}],"version-history":[{"count":4,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/2320\/revisions"}],"predecessor-version":[{"id":8034,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/posts\/2320\/revisions\/8034"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media\/2322"}],"wp:attachment":[{"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/media?parent=2320"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/categories?post=2320"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msgprogramator.sk\/de\/wp-json\/wp\/v2\/tags?post=2320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}