Commit 91acdd12 authored by Blanke, Daniela's avatar Blanke, Daniela
Browse files

Update design-patterns-factory_method.html

parent e0cc5990
Pipeline #8013 failed with stage
in 38 seconds
......@@ -165,7 +165,7 @@ logger.log(Level.INFO, "Hello World!");
<p>Die abstrakte Klasse <code>LoggerCreator</code> definiert eine abstrakte Methode <code>createLogger</code>. Eine statische Methode zur Erzeugung der bekannten konkreten Logger gibt es hingegen nicht mehr. Es wird angenommen, dass zukünftig verschiedene konkrete Logger (wie z.B. der <code>JDBCLogger</code>) entstehen, die durch Dritte realisiert werden. Der Fokus liegt auf der Erweiterbarkeit. Die Oberklasse zur Objekterzeugung <code>LoggerCreator</code> kann auch Methoden beinhalten, die Verhalten implementieren, das für alle Logger gleich ist – hier beispielhaft die Methode <code>register</code>. Nur die konkreten Erzeuger (z.B. <code>JDBCLoggerCreator</code>) sind von einer zugehörigen Logger-Implementierung (z.B. <code>JDBCLogger</code>) abhängig.</p>
<p>Das folgende UML-Klassendiagramm verallgemeinert das Logger-Beispiel, so dass das allgemeingültige Muster der GoF-Fabrikmethode entsteht, das durch Erich Gamma et al. <a href="#cite-GHJ+10">[GHJ+10]</a> wie folgt definiert ist:<p>
<p>Das folgende UML-Klassendiagramm verallgemeinert das Logger-Beispiel, sodass das allgemeingültige Muster der GoF-Fabrikmethode entsteht, das durch Erich Gamma et al. <a href="#cite-GHJ+10">[GHJ+10]</a> wie folgt definiert ist:<p>
<div class="cite">"Define an interface for creating an object, but let subclasses decide which class to instantiate. The factory method lets a class defer instantiation it uses to subclasses." (Erich Gamma et al.)</div>
......@@ -180,7 +180,7 @@ logger.log(Level.INFO, "Hello World!");
<h4>Abstrakte Fabrik</h4>
<p>Wenn die Fabrik-Klasse nicht nur ein Produkt, sondern gleich eine ganze Familie von zusammengehörigen Produkten erzeugen soll, wird die Fabrikmethode schnell zum Entwurfsmuster <a href="https://en.wikipedia.org/wiki/Abstract_factory_pattern"><Abstrakte Fabrik (engl. <i>Abstract Factory</i>)</a> ausgebaut. Ein beliebtes Beispiel ist hier im Kontext von UI-Frameworks die Erzeugung von UI-Elementen (wie Buttons, Textfelder, usw.), die jeweils einem bestimmten Design-Stil folgen sollen (wie Cupertino oder Material Design). Hierbei entsteht für jedes Produkt einer Produktfamilie eine separate Spezialisierungshierarchie. Die konkreten Produkte einer Familie werden alle aus einer gemeinsamen Fabrik-Klasse erzeugt, die dadurch einen konsistenten Design-Stil gewährleistet. Die Client arbeitet ausschließlich auf abstrakten Produkten, die er über eine konkrete Fabrik-Klasse erzeugt. Die Idee der Abstrakten Fabrik wird durch das folgende UML-Klassendiagramm und das zugehörige Code-Beispiel verdeutlicht.</p>
<p>Wenn die Fabrik-Klasse nicht nur ein Produkt, sondern gleich eine ganze Familie von zusammengehörigen Produkten erzeugen soll, wird die Fabrikmethode schnell zum Entwurfsmuster <a href="https://en.wikipedia.org/wiki/Abstract_factory_pattern">Abstrakte Fabrik (engl. <i>Abstract Factory</i>)</a> ausgebaut. Ein beliebtes Beispiel ist hier im Kontext von UI-Frameworks die Erzeugung von UI-Elementen (wie Buttons, Textfelder, usw.), die jeweils einem bestimmten Design-Stil folgen sollen (wie Cupertino oder Material Design). Hierbei entsteht für jedes Produkt einer Produktfamilie eine separate Spezialisierungshierarchie. Die konkreten Produkte einer Familie werden alle aus einer gemeinsamen Fabrik-Klasse erzeugt, die dadurch einen konsistenten Design-Stil gewährleistet. Der Client arbeitet ausschließlich auf abstrakten Produkten, die er über eine konkrete Fabrik-Klasse erzeugt. Die Idee der Abstrakten Fabrik wird durch das folgende UML-Klassendiagramm und das zugehörige Code-Beispiel verdeutlicht.</p>
<img src="media/patterns_abstractfactory_example.png" style="width:1000px">
<label>Anwendungsbeispiel für das Entwurfsmuster Abstrakte Fabrik</label>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment