Klassifizierung  | 
       
klassenbasiertes Erzeugungsmuster
  | 
  |  | 
     
     
       Zweck  | 
       
Definition einer Schnittstelle mit Operationen zum Erzeugen eines
Objekts 
Konstruktoren virtuell machen
  | 
  |  | 
     
     
       Alias  | 
       
factory method 
virtueller Konstruktor
  | 
  |  | 
     
     
       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
  | 
  |  | 
     
     
       Beispiel  | 
       
Anwendung <--> Dokument
  | 
  |  | 
     
     
       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
  | 
  |  | 
     
     
       Struktur  | 
       
Strukturdiagramm
  | 
  |  | 
     
     
       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
  | 
  |  | 
     
     
       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
  | 
  |  | 
     
     
       Implementierung  | 
       
         | 
     
     
        | 
       Variante: parametrisierte Fabrikmethoden 
 über Parameter wird der Erzeugungsprozess gesteuert und die Auswahl
der Produkte vorgenommen
         | 
     
     
        | 
        | 
     
     
        | 
       Erzeuger und Produkt zwei verschiedene Klassen,
 damit der Erzeuger verändert werden kann.
  | 
  |  | 
     
     
       Beispiel  | 
        | 
  |  | 
     
     
       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  | 
        | 
  |  | 
     
     
        | 
       
 Erweiterbarkeit um eigene Klassen nicht möglich,
 ohne die Erzeuger-Klasse zu ändern
 und deren Schnittstelle zu erweitern.
  | 
  |  | 
     
     
        | 
       die Konstruktoraufrufe der Produktklassen stehen
nicht in dem Klientencode,
sondern sind in der Erzeuger-Klasse
gebündelt
  | 
  |  | 
     
     
       Bekannte Verwendungen  | 
       
in vielen Klassenbibliotheken
  | 
  |  | 
     
     
       verwandte Muster  | 
       
         | 
     
     
        | 
        | 
  |  | 
     
     
        | 
       ruft Fabrikmethoden auf  | 
  |  | 
     
     
        | 
       benötigt keine Unterklassen  | 
  |  |