homeSoftwaredesign Softwaredesign: Fabrikmethode Prof. Dr. Uwe Schmidt FH Wedel

Fabrikmethode

weiter

weiter

Fabrikmethode

Klassifizierung
klassenbasiertes Erzeugungsmuster
weiter
Zweck
Definition einer Schnittstelle mit Operationen zum Erzeugen eines Objekts
Konstruktoren virtuell machen
weiter
Alias
factory method
virtueller Konstruktor
weiter
Motivation
Anwendung bestimmt, wann ein Objekt erzeugt werden soll
Anwendung arbeitet aber nur mit abstrakten Klassen, darf also die konkrete Ausprägung des zu erzeugenden Objekts nicht kennen.
Konstruktor soll vor der Anwendung versteckt werden
weiter
Beispiel
Anwendung <--> Dokument
weiter
Anwendbarkeit
konkrete Klasse der zu erzeugenden Objekte soll vor dem Anwender verborgen bleiben
Erzeugung soll an Unterklassen delegiert werden
eine konkrete Klasse soll entscheiden, wie das Produkt zu erzeugen ist
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  Produkt
abstrakt
Schnittstelle des erzeugten Produkts
  KonkretesProdukt
konkret
konkrete Klasse des erzeugten Produkts
  Erzeuger
abstrakt
definiert Schnittstelle für die Fabrikmethode
kann default-Implementierung festlegen
kann Methoden zum Erzeugen aufrufen
  KonkreterErzeuger
konkret realisiert oder überschreibt die Fabrikmethode so, dass ein konkretes Produkt zurückgegeben wird
weiter
Konsequenzen
frameworks
vorgefertigte Mustersysteme, Umgebungen können angepasst und erweitert werden
z.B. ein beliebiger Editor mit menubar, toolbar, Dokumentenfenster, ... fertig
meine Anwendung bestimmt, was in die Inhaltsfenster kommt
weiter
Implementierung
Variante: parametrisierte Fabrikmethoden
über Parameter wird der Erzeugungsprozess gesteuert und die Auswahl der Produkte vorgenommen
wird nur ein Erzeuger verwendet, kann die abstrakte Klasse entfallen
--> weitere Vereinfachung
Erzeuger und Produkt zwei verschiedene Klassen, damit der Erzeuger verändert werden kann.
weiter
Beispiel
in Java: Figuren
weiter
Vereinfachte Variante
wenn die Flexibilität nicht erforderlich ist, die konkreten Unterklassen einer Hierarchie aber vor dem Klienten versteckt werden soll, können Erzeuger und Produkt zusammengefasst werden.
Beispiel
in Java: Figuren
weiter
schlecht
Erweiterbarkeit um eigene Klassen nicht möglich, ohne die Erzeuger-Klasse zu ändern und deren Schnittstelle zu erweitern.
weiter
gut
die Konstruktoraufrufe der Produktklassen stehen nicht in dem Klientencode, sondern sind in der Erzeuger-Klasse gebündelt
weiter
Bekannte Verwendungen
in vielen Klassenbibliotheken
weiter
verwandte Muster
verwendet Fabrikmethode
weiter
ruft Fabrikmethoden auf
weiter
benötigt keine Unterklassen
weiter

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