Klassifizierung  | 
       
objektbasiertes Erzeugungsmuster
  | 
  |  | 
     
     
       Zweck  | 
       
Erzeugung von Objekten durch Kopieren (klonen)
von einem prototypischen Exemplar
  | 
  |  | 
     
     
       Alias  | 
       
prototype
  | 
  |  | 
     
     
       Motivation  | 
       
Systemspezifische Objekte in der Initialisierungsphase
einmal erzeugen
         | 
     
     
        | 
       
# der Konstruktoraufrufe minimieren und
an einer Stelle lokalisieren
         | 
     
     
        | 
       
komplexere Objekte mit vielen Attributen einmal
erzeugen, anschließend kopieren und anpassen
         | 
     
     
        | 
       
alle Attribute sind mit einheitlichen default-Werten
initialisiert.
         | 
     
     
        | 
       
einfacher als jedesmal vollständig neu erzeugen
  | 
  |  | 
     
     
       Beispiel  | 
        | 
  |  | 
     
     
       Anwendbarkeit  | 
       
         | 
     
     
        | 
       System unabhängig machen von der
konkreten Zusammensetzung und Repräsentation der Objekte
         | 
     
     
        | 
       
Klassen der zu erzeugenden Objekte können zur Laufzeit
spezifiziert werden
         | 
     
     
        | 
       
Vermeidung von Klassenhierachien von Fabriken
  | 
  |  | 
     
     
       Struktur  | 
       
Strukturdiagramm
  | 
  |  | 
     
     
       Teilnehmer  | 
       
         | 
     
     
          Prototyp | 
       
Schnittstelle der zu kopierenden Objekte
         | 
     
     
          KonkreterPT[1-2] | 
       
Klassen, die die clone-Operation implementieren
         | 
     
     
          Klient | 
       
erzeugt Objekte durch Aufrufe von clone()
  | 
  |  | 
     
     
       Konsequenzen  | 
       
         | 
     
     
        | 
        | 
     
     
        | 
       
aber: es wird von allen Klassen ein Prototyp-Objekt
benötigt
         | 
     
     
        | 
       
die Menge der Attribute kann ohne Kenntnis und
ohne Modifikation der Klienten vergrößert werden.
  | 
  |  | 
     
     
       Implementierung  | 
       
         | 
     
     
        | 
       Prototyp-Verwalter für
viele Prototypen
         | 
     
     
        | 
       
Zugriff über Schlüssel
         | 
     
     
        | 
       
dann auch Prototyp-Erzeugung auf Anforderung (on demand)
         | 
     
     
        | 
        | 
     
     
        | 
        | 
     
     
        | 
       
tiefes <--> flaches Kopieren beim Klonen
         | 
     
     
        | 
       
Tiefe des Klonens ist problemabhängig 
         | 
     
     
        | 
        Vorsicht beim Klonen von zyklischen Strukturen
  | 
  |  | 
     
     
       Beispiele  | 
        | 
  |  | 
     
     
       verwandte Muster  | 
       
         | 
     
     
        | 
       
 konkuriert mit  Prototyp
 kann aber auch mit Prototyp kombiniert werden
  | 
  |  | 
     
     
        | 
       
 auch Komposita können über Klonen
 als Prototypen genutzt werden 
 z.B. Transformationen: Muster erzeugen,
 kopieren und modifizieren
  | 
  |  |