homeSoftwaredesign Softwaredesign: Abstrakte Fabrik Prof. Dr. Uwe Schmidt FH Wedel

Abstrakte Fabrik

weiter

weiter

Abstrakte Fabrik

Klassifizierung
objektbasiertes Erzeugungsmuster
weiter
Zweck
Schnittstelle zum Erzeugen von Familien verwandter oder voneinander abhängiger Objekte, ohne die Klassen direkt zu benennen.
weiter
Alias
kit
abstract factory
weiter
Motivation
Anwendungen für verschiedene Fenstersysteme
weiter
Beispiel
public
interface WidgetFactory {
 
  public
  Window createWindow();
 
  public
  ScrollBar createScrollBar();
}
 
//--------------------
 
class QtWidgetFactory
  implements WidgetFactory {
 
  public
  Window createWindow() {
    return
      new QtWindow();
  }
 
  public
  ScrollBar createScrollBar() {
    return
      new QtScrollBar();
  }
}
 
//--------------------
 
class GTKWidgetFactory
  implements WidgetFactory {
 
  public
  Window createWindow() {
    return
      new GTKWindow();
  }
 
  public
  ScrollBar createScrollBar() {
    return
      new GTKScrollBar();
  }
}
 
//--------------------
 
abstract
class Window { // ...
}
 
class QtWindow
  extends Window { // ...
}
 
class GTKWindow
  extends Window { // ...
}
 
//--------------------
 
abstract
class ScrollBar { // ...
}
 
class QtScrollBar
  extends ScrollBar { // ...
}
 
class GTKScrollBar
  extends ScrollBar { // ...
}
weiter
Anwendbarkeit
Unabhängigkeit von der Erzeugung, Zusammensetzung und Repräsentation von Produkten
Konfigurierbarkeit von mehreren Produktfamilien
Sicherung der Konsistenzbedingungen zwischen den Produkten einer Familie
Klassenbibliotheken von Produkten, aber nur die Schnittstelle ist öffentlich
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  AbstractFactory
Abstrakte Schnittstelle für erzeugende Funktionen
  Factory[1-2]
Implementierungen der Schnittstelle
  AbstractProduct[A-B]
Schnittstellen für die verschiedenen Produkte
  Product[A-B][1-2]
konkrete Produkte: pro konkreter Fabrik und abstraktem Produkt eine konkrete Klasse
  Client
verwendet nur die abstrakte Fabrik und die abstrakten Produkte
weiter
Konsequenzen
Isolierung der konkreten Klassen von der Anwendung
keine Konstruktoraufrufe in der Anwendung,
nur in der Fabrik
einfacher Austausch der Produktfamilien
dynamischer Austausch der Produktfamilien
Konsistenz unter den Produkten ist gewahrt
neue Produkte:
Erweiterung der Fabrik-Schnittstelle
Erweiterung aller Fabrik-Implementierungen
weiter
Implementierung
häufig:
nur ein Fabrikobjekt zur Laufzeit erzeugen
Singleton Erzeugungsmuster
in Java: Dynamisches Laden einer Fabrik
 
// load concrete factory class
 
Class factoryClass =
    Class.forname("my.package.Factory");
 
// create one instance
// of this factory
 
AbstractFactory factory =
   (AbstractFactory)(
     factoryClass.newInstance());
weiter
Bekannte Verwendungen
JDK AWT Implementierungen für Windows, Mac und X
weiter
verwandte Muster
zur Erzeugung der Fabrik
weiter
zur Implementierung der Fabrik-Klassen
weiter

Letzte Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel