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
|
| |