Das Factory Pattern stellt einen Mechanismus zur Verfügung um Objekte zu erzeugen, deren konkreter Typ zur Compile-Zeit nicht bekannt ist. Die zu erzeugenden Objekte implementieren normalerweise eine gemeinsame Schnittstelle oder erweitern eine gemeinsame (abstrakte) Basisklasse.
javax.swing
package. Mit Hilfe dieser Klasse werden
Objekte erzeugt, die für das Zeichnen der Umrandung von grafischen
Komponenten in Swing verantwortlich sind.
Das hier verwendete Beispiel zum Factory-Pattern beschäftigt sich mit der Erzeugung von Getränken. Jedes erzeugte Getränk muss seinen Namen, den Kaloriengehalt und den Alkoholgehalt zur Verfügung stellen.
Die nachfolgende Klasse Getraenk
stellt die abstrakte Oberklasse
für Getränke dar. Im Factory-Pattern stellt diese Klasse das
Produkt
dar.
public abstract class Getraenk { public abstract String getName(); public abstract double getKalorien(); public abstract double getAlkoholgehalt(); }
Ein konkretes Getränk stellt z.B. Limonade dar. Limonaden können
unterschiedliche Kaloriengehalte und Namen haben, aber der Alkoholgehalt einer
Limonade ist 0kcal. Eine Limoade entspricht im obigen Klassendiagramm
Konkretes_Produkt
.
public class Limonade extends Getraenk{ private String name; private double kalorien; public Limonade(String name, double kalorien){ this.name = name; this.kalorien = kalorien; } public double getAlkoholgehalt(){ return 0; } public double getKalorien(){ return kalorien; } public String getName(){ return name; } }
Ein weiteres Beispiel für ein konkretes Produkt in unserem Beispiel ist die Klasse
Wein
in der neben Kalorienzahl und Name auch der Alkoholgehlat variiert.
public class Wein extends Getraenk{ private String name; private double kalorien, alkoholgehalt; public Wein(String name, double kalorien, double alkoholgehalt){ this.name = name; this.kalorien = kalorien; this.alkoholgehalt = alkoholgehalt; } public double getAlkoholgehalt(){ return alkoholgehalt; } public double getKalorien(){ return kalorien; } public String getName(){ return name; } }
Als nächstes Element des Factory Pattern wollen wir uns in unserem
Getränke Beispiel dem Abstrakten Eezeuger widmen. Defniert wird
ein abstrakter Getränkeautomat, der für eine int
-Konstante
ein Getränk liefert.
public abstract class AbstractGetraenkeAutomat { public abstract Getraenk createGetraenk(int gConstant); }
Als abschließendes Element des Factory Pattern folgt nun der GetraenkeAutomat
als konkreter Erzeuger:
public class GetraenkeAutomat extends AbstractGetraenkeAutomat{ public final static int WEIN = 1; public final static int LIMONADE = 2; public Getraenk createGetraenk(int gConstant){ switch(gConstant) { case WEIN: return new Wein("Merlot",70,13); case LIMONADE: return new Limonade(Orangenlimonade",50); default: return null; } } }
de.wikipedia.org
Fabrikmethode (Factory)
http://de.wikipedia.org/wiki/Fabrikmethode
Jens Günther
http://wwwswt.informatik.uni-rostock.de
Fabrikmethode
http://wwwswt.informatik.uni-rostock.de/deutsch/Infothek/Entwurfsmuster/patterns/FactoryMethod/index.html
theserverside.de
Factory Method Pattern in Java
http://www.theserverside.de/factory-method-pattern-in-java/