Harald Köbler [email protected] Software Design Patterns Prototype.
-
Upload
eberhard-stohr -
Category
Documents
-
view
118 -
download
1
Transcript of Harald Köbler [email protected] Software Design Patterns Prototype.
Harald Köbler
Aufgabe: Erzeugungsmuster (Creational Pattern)
Gültigkeitsbereich: objektbasierend
Harald Köbler
Zweck:
Bestimme die Arten zu erzeugender Objekte durch die Verwendung eines prototypischen Exemplars und erzeuge neue Objekte durch Kopieren dieses Prototypen.
Harald Köbler
Motivation:
• Das Erzeugen einer Instanz einer Klasse ist sehr zeitraubend oder komplex.
• Es werden Kopien der original Instanz erzeugt und abgeändert.
Harald Köbler
Anwendbarkeit:
• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden
Harald Köbler
Anwendbarkeit:
• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden
• Klassen werden erst zur Laufzeit spezifiziert
Harald Köbler
Anwendbarkeit:
• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden
• Klassen werden erst zur Laufzeit spezifiziert
• parallele Klassenhierarchien vermeiden
Harald Köbler
Anwendbarkeit:
• System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden
• Klassen werden erst zur Laufzeit spezifiziert
• parallele Klassenhierarchien vermeiden
• Exemplare einer Klasse haben nur wenige Zustandskombinationen
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
• Hinzufügen und entfernen von Produkten zur Laufzeit
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
• Hinzufügen und entfernen von Produkten zur Laufzeit
• Spezifikation neuer Objekte durch Variation von Werten
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
• Hinzufügen und entfernen von Produkten zur Laufzeit
• Spezifikation neuer Objekte durch Variation von Werten
• Spezifikation neuer Objekte durch Variation der Struktur
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
• Hinzufügen und entfernen von Produkten zur Laufzeit
• Spezifikation neuer Objekte durch Variation von Werten
• Spezifikation neuer Objekte durch Variation der Struktur
• Verringerte Unterklassenbildung
Harald Köbler
Konsequenzen:
• versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
• Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
• Hinzufügen und entfernen von Produkten zur Laufzeit
• Spezifikation neuer Objekte durch Variation von Werten
• Spezifikation neuer Objekte durch Variation der Struktur
• Verringerte Unterklassenbildung
Wichtig: jede Unterklasse von Prototype muss die Operation „Clone()“ implementieren
Harald Köbler
Implementierung:
• statisch typisierten Programmiersprachen wie C++
• Verwendung von Prototypenverwalter
Harald Köbler
Implementierung:
• statisch typisierten Programmiersprachen wie C++
• Verwendung von Prototypenverwalter
• Implementierung der Clone()-Operation
„shallow copy“ – „deep copy“
Harald Köbler
Implementierung:
• statisch typisierten Programmiersprachen wie C++
• Verwendung von Prototypenverwalter
• Implementierung der Clone()-Operation
„shallow copy“ – „deep copy“
• Initialisierung geklonter Objekte
Harald Köbler
Beispielcode:
class Swimmer
{
String name;
int age;
String club;
float time;
boolean female;
}
Harald Köbler
Beispielcode:public class SwimData implements Cloneable
{
Vector swimmers;
public SwimData(String filename)
{
String s = "";
swimmers = new Vector();
//open data file
InputFile f = new InputFile(filename);
s= f.readLine(); //read in and parse each line
while(s != null)
{
swimmers.addElement(new Swimmer(s));
s= f.readLine();
}
f.close();
}
Harald Köbler
Beispielcode:
Liste in GUI anzeigen:
swList.removeAll(); //clear list
for (int i = 0; i < sdata.size(); i++)
{
sw = sdata.getSwimmer(i);
swList.addItem(sw.getName()+" "+sw.getTime());
}
Harald Köbler
Beispielcode:
Liste in GUI anzeigen:
swList.removeAll(); //clear list
for (int i = 0; i < sdata.size(); i++)
{
sw = sdata.getSwimmer(i);
swList.addItem(sw.getName()+" "+sw.getTime());
}
sxdata = (SwimData)sdata.clone();
sxdata.sortByTime(); // re-sort
cloneList.removeAll(); // clear list
Harald Köbler
Beispielcode:
Geklonte Liste in GUI anzeigen:
for(int i = 0; i< sxdata.size(); i++)
{
sw = sxdata.getSwimmer(i);
cloneList.addItem(sw.getName()+” “+sw.getTime());
}
Harald Köbler
Verwandte Muster:
• Abstrakte Fabrikmuster (Abstract Factory)
• Kompitions- und Dekorierermuster
(Composite, Decorator)
Harald Köbler
Harald Köbler
Literaturquellen:
• „Design Patterns“, AW-Verlag Gamma, Helm, Johnson, Vlissides
• „Entwurfsmuster“, AW-Verlag Übersetzt Dirk Riehle
• „The Design Patterns – Java Companion“ AW-Verlag, James W. Cooper
Harald Köbler
Internetquellen:
• http://www.fh-wedel.de/~si/seminare/ws97/Ausarbeitung/2.Winter/gamma10.htm
• http://home.earthlink.net/~huston2/dp/prototype.html
• www2.informatik.uni-erlangen.de/Lehre/SS01/XML/Docs/Erzeugungsmuster.pdf
Catalog of Non-Software Examples of Design Patterns:
• http://www.agcs.com/supportv2/techpapers/patterns/papers/tutnotes/