Abstract Factory Struktur und Beispiel
Abstract Factory Struktur und Beispiel
Abstract Factory Struktur und Beispiel
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Abstract</strong> <strong>Factory</strong><br />
Client<br />
<br />
<strong>Factory</strong><br />
createA()<br />
createB()<br />
Concrete<br />
Product A1<br />
doIt()<br />
<br />
Product A<br />
doIt()<br />
Concrete<br />
Product A2<br />
doIt()<br />
Concrete<br />
<strong>Factory</strong>1<br />
createA()<br />
createB()<br />
Concrete<br />
<strong>Factory</strong>2<br />
createA()<br />
createB()<br />
<br />
Product B<br />
doItAlso()<br />
class <strong>Factory</strong>1 <strong>Factory</strong>2 {<br />
Product class A Client createA {<br />
() {<br />
return<br />
<strong>Factory</strong> new<br />
f; Concrete<br />
Product A, Product<br />
B;<br />
A1(); A2();<br />
} f= new <strong>Factory</strong>1();<br />
Product A= B f.createA(); createB () B= { f.createB();<br />
return<br />
}<br />
new Concrete Product B1(); B2();<br />
}<br />
}<br />
Concrete<br />
Product B1<br />
doItAlso()<br />
Concrete<br />
Product B2<br />
doItAlso()
Bike <strong>Factory</strong><br />
Bike<br />
<br />
Parts<strong>Factory</strong><br />
createFrame()<br />
createBell()<br />
MountainBike<br />
Frame<br />
paintFrame()<br />
<br />
Frame<br />
paintFrame()<br />
CityBike<br />
Frame<br />
paintFrame()<br />
MountainBike<br />
Parts<br />
createFrame()<br />
createBell()<br />
CityBike<br />
Parts<br />
createFrame()<br />
createBell()<br />
class MountainBikeParts CityBikeParts implements implements Parts<strong>Factory</strong> Parts<strong>Factory</strong> { {<br />
Frame createFrame() (){{<br />
class return Client new { MountainBikeFrame();<br />
CityBikeFrame();<br />
} Parts<strong>Factory</strong> f; Frame frame, Bell bell;<br />
Bell f= new createBell() MountainBikeParts();<br />
{<br />
frame return = new f.createFrame(); CityBikeBell();<br />
MountainBikeBellI(); bell= f.createBell();<br />
}<br />
}<br />
}<br />
MountainBike<br />
Bell<br />
ringBell()<br />
<br />
Bell<br />
ringBell()<br />
CityBike<br />
Bell<br />
ringBell()
Motivation - <strong>Beispiel</strong>e<br />
• Pluggable look and feel von Swing<br />
• client code soll vollständig unabhägig davon sein, welche<br />
Produktefamilie gewählt wird<br />
• Menü in Restaurants (Französisches, Amerikanisches, Italienisches etc.)<br />
• Testversionen, Versionsupdates (neuer Konstruktor mit neuen<br />
Parametern, ev. Parameter unterschiedlich, ob bspw. Proxy für ein<br />
remote Objekt, maintenance window)<br />
• Interface für das Instanzieren von Objekten<br />
• Erzeugen von Familien von zusammengehörigen Objekten<br />
• Unabhängigkeit von konkreten Implementierungen<br />
• Konfiguration des Systems mit einer konkreten Fabrik<br />
• Erweiterbarkeit durch weitere Implementierungen (weitere<br />
Produktefamilien)<br />
• Strategie für das Erzeugen von Objekten