Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Eberhard Stohr Geändert vor über 11 Jahren
1
Harald Köbler hk018@hdm-stuttgart.de Software Design Patterns Prototype
2
Harald Köbler hk018@hdm-stuttgart.de Aufgabe: Erzeugungsmuster (Creational Pattern) Gültigkeitsbereich: objektbasierend
3
Harald Köbler hk018@hdm-stuttgart.de Zweck: Bestimme die Arten zu erzeugender Objekte durch die Verwendung eines prototypischen Exemplars und erzeuge neue Objekte durch Kopieren dieses Prototypen.
4
Harald Köbler hk018@hdm-stuttgart.de Motivation: Das Erzeugen einer Instanz einer Klasse ist sehr zeitraubend oder komplex. Es werden Kopien der original Instanz erzeugt und abgeändert.
5
Harald Köbler hk018@hdm-stuttgart.de Anwendbarkeit: System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden
6
Harald Köbler hk018@hdm-stuttgart.de Anwendbarkeit: System soll unabhängig davon sein, wie seine Produkte erzeugt, zusammengesetzt und repräsentiert werden Klassen werden erst zur Laufzeit spezifiziert
7
Harald Köbler hk018@hdm-stuttgart.de 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
8
Harald Köbler hk018@hdm-stuttgart.de 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
9
Harald Köbler hk018@hdm-stuttgart.de Struktur:
10
Harald Köbler hk018@hdm-stuttgart.de Konsequenzen: versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder)
11
Harald Köbler hk018@hdm-stuttgart.de Konsequenzen: versteckt konkrete Produktklassen von dem Client ( Abstract Factory, Builder) Client kann ohne Modifikation mit anwendungsspezifische Klassen arbeiten
12
Harald Köbler hk018@hdm-stuttgart.de 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
13
Harald Köbler hk018@hdm-stuttgart.de 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
14
Harald Köbler hk018@hdm-stuttgart.de 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
15
Harald Köbler hk018@hdm-stuttgart.de 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
16
Harald Köbler hk018@hdm-stuttgart.de 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
17
Harald Köbler hk018@hdm-stuttgart.de Implementierung: statisch typisierten Programmiersprachen wie C++
18
Harald Köbler hk018@hdm-stuttgart.de Implementierung: statisch typisierten Programmiersprachen wie C++ Verwendung von Prototypenverwalter
19
Harald Köbler hk018@hdm-stuttgart.de Implementierung: statisch typisierten Programmiersprachen wie C++ Verwendung von Prototypenverwalter Implementierung der Clone()-Operation shallow copy – deep copy
20
Harald Köbler hk018@hdm-stuttgart.de Implementierung: statisch typisierten Programmiersprachen wie C++ Verwendung von Prototypenverwalter Implementierung der Clone()-Operation shallow copy – deep copy Initialisierung geklonter Objekte
21
Harald Köbler hk018@hdm-stuttgart.de Beispielcode: class Swimmer { String name; int age; String club; float time; boolean female; }
22
Harald Köbler hk018@hdm-stuttgart.de 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(); }
23
Harald Köbler hk018@hdm-stuttgart.de 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()); }
24
Harald Köbler hk018@hdm-stuttgart.de 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
25
Harald Köbler hk018@hdm-stuttgart.de Beispielcode: Geklonte Liste in GUI anzeigen: for(int i = 0; i< sxdata.size(); i++) { sw = sxdata.getSwimmer(i); cloneList.addItem(sw.getName()+ +sw.getTime()); }
26
Harald Köbler hk018@hdm-stuttgart.de Beispielcode: Nach Clone
27
Harald Köbler hk018@hdm-stuttgart.de Beispielcode: Nach Refresh:
28
Harald Köbler hk018@hdm-stuttgart.de Verwandte Muster: Abstrakte Fabrikmuster (Abstract Factory) Kompitions- und Dekorierermuster (Composite, Decorator)
29
Harald Köbler hk018@hdm-stuttgart.de Prototype im nicht-Computerbereich:
30
Harald Köbler hk018@hdm-stuttgart.de
31
Harald Köbler hk018@hdm-stuttgart.de 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
32
Harald Köbler hk018@hdm-stuttgart.de 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/
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.