Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Entwurfsmuster in Java Das Observer- und das Decorator-Pattern Friederike L¨ owe
13. M¨arz 2011
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Inhaltsverzeichnis Einleitung Wozu eigentlich Entwurfsmuster? Die Grundlage: Design-Prinzipien Das Decorator-Pattern Das Muster am Beispiel erkl¨art Dekorierer aus der Praxis: Java I/O Das Observer-Pattern Allgemein: Was ist das Observer-Pattern? Observer in Java Ausblick Wie geht’s weiter? Andere Entwurfsmuster Referezen
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Einleitung
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Wo ist der Unterschied?
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Irgendjemand hat deine Probleme schon gel¨ost.
Die meisten Probleme, die einem beim Programmieren begegnen k¨onnen, hat schon einmal jemand gel¨ ost. Besonders erfolgreiche L¨osungsstrategien, die sich f¨ ur eine bestimmte Art von Problem bew¨ahrt haben, wurden als L¨ osungsmuster gesammelt.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Grundregeln
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Entwurfsprinzip
Programmiere auf eine Schnittstelle, nicht auf eine Implementierung.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Entwurfsprinzip
Identifiziere die Aspekte deiner Anwendung, die sich ¨andern k¨onnen und trenne sie von denen, die konstant bleiben.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Entwurfsprinzip
Ziehe Komposition der Vererbung vor.
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Entwurfsprinzip
Strebe bei deinen Entw¨ urfen mit interagierenden Objekten nach lockerer Kopplung.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Entwurfsprinzip
Klassen sollten f¨ ur Erweiterung offen, aber f¨ ur Ver¨anderung geschlossen sein.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Was sind Entwurfsmuster?
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Das Decorator-Pattern
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ein Kaffeehaus... urspr¨ungliches Bestellsystem
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Extras
Zum Kaffee kann man verschiedene Zutaten dazu bestellen, wie etwa: • heiße Milch • Sojamilch • Schokolade • Milchschaum • ....
Jede dieser Zutaten kostet nat¨ urlich extra. Wie kann man das in das Bestellsystem integrieren?
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ein erster Versuch...
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Neuer Ansatz!
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Problempotential?
• Preis¨ anderungen bei den Zutaten → Bearbeitung von
bestehendem Code ¨ • neue Zutaten → neue Methoden in der Superklasse, Andern der preis()-Methode • Einf¨ uhren neuer Getr¨anke → Eistee mit Milchschaum?? • Was ist, wenn ein Kunde Doppelschoko w¨ unscht? • Was noch....?
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
So geht es: Das Decorator-Muster
Ein Getr¨ank wird mit Zutaten dekoriert, z.B bestellt ein Kunde eine dunkle R¨ostung mit Schoko und Milchschaum. 1. Wir nehmen ein DunkleR¨ ostung-Objekt, 2. dekorieren es mit einem Schoko-Objekt, 3. dekorieren es mit einem Milchschaum-Objekt, 4. rufen die Methode preis() auf und st¨ utzen uns auf Delegierung um den Preis f¨ ur die Zutaten hinzuzuf¨ ugen.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ein Getr¨ank mit Dekorieren aufbauen
Wir nehmen uns ein DunkleR¨ ostung-Objekt,...
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ein Getr¨ank mit Dekorieren aufbauen ...erzeugen uns ein Schoko-Objekt und packen es um DunkleR¨ostung,...
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ein Getr¨ank mit Dekorieren aufbauen ...erstellen einen Milchschaum-Dekorierer und packen Schoko damit ein.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Ein Getr¨ank mit Dekorieren aufbauen: Zwischenstand • Dekorierer haben den gleichen Supertyp wie die Objekte, die
sie dekorieren. • Man kann ein oder mehr Objekte verwenden, um ein Objekt
einzupacken. • Da der Dekorierer den gleichen Supertyp wie das dekorierte
Objekt hat, k¨onnen wir das dekorierte Objekt an der Stelle des urspr¨ unglichen (jetzt eingepackten) Objekts herumreichen. • Der Dekorierer f¨ ugt sein eigenes Verhalten hinzu, bevor
und/oder nachdem der Aufruf an das dekorierte Objekt delegiert wurde, um die Arbeit abzuschließen. • Objekte k¨ onnen jederzeit dekoriert werden. Wir k¨onnen
Objekte also zur Laufzeit dynamisch mit so vielen Dekorierern dekorieren, wie es uns gef¨allt.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ein Getr¨ank mit Dekorieren aufbauen
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Dekorierer aus der Praxis: Java I/O
BufferedInputStream und LineNumerInputStream erweitern beide FilterInputStream, die als abstrakte Dekorierer-Klasse dient.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Java I/O – Klassendiagramm
BufferedInputStream und LineNumerInputStream erweitern beide FilterInputStream, die als abstrakte Dekorierer-Klasse dient.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Das Observer-Pattern
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Das Observer-Muster
Das Observer-Muster erm¨ oglicht einem oder mehreren Objekten, automatisch auf die Zustands¨anderung eines bestimmten Objekts zu reagieren, um den eigenen Zustand anzupassen.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
ein Zeitungsabonement
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Das Observer-Muster: Schema Das Observer-Muster definiert eine Eins-zu-viele-Abh¨angigkeit zwischen Objekten in der Art, dass alle abh¨angigen Objekte benachrichtigt werden, wenn sich der Zustand des einen Objekts ¨andert.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Das Observer-Muster: Klassendiagramm
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Observable und Observer in Java
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ein Beispiel
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Irgendjemand hat also deine Probleme schon gel¨ost.
Am besten nutzt man Entwurfsmuster, indem man sein Ged¨achtnis mit ihnen f¨ uttert und in bestehenden Anwendungen die Stellen erkennt, an denen man sie einsetzten kann. Statt Code-Wiederverwertung bieten Muster Erfahrungs-Wiederverwertung.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Wie finde ich ein passendes Entwurfsmuster? 1. Klassifizierung nach der Aufgabe: • Erzeugungsmuster betreffen den Prozess der
Objekterzeugung • Strukturmuster befassen sich mit der Zusammensetzung von
Klassen und Objekten • Verhaltensmuster charakterisieren die Art und Weise, in der
Klassen und Objekte zusammenarbeiten und Zust¨andigkeiten aufteilen
2. Klassifizierung nach G¨ ultigkeitsbereich: • klassenbasiert (Beziehungen mit Hilfe von Vererbung,
statisches Verhalten) • objektbasiert (Beziehungen zwischen zusammenarbeitenden
Objekten, dynamisch ¨anderbares Verhalten)
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
¨ Uberblick u¨ber Entwurfsmuster
C
O
Erzeugermuster Fabrikmethode
Strukturmuster Adapter (klassenbasiert)
Abstrakte Fabrik Erbauer Prototyp Singleton
Adapter (objektbasiert) Br¨ ucke Dekorierer Fassade Fliegengewicht Kompositum Proxy
Verhaltensmuster Interpreter Schablonenmethode Befehl Beobachter Besucher Iterator Memento Strategie Vermittler Zustand Zust¨andigkeitskette
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Erzeugungsmuster: Fabrikmethode
Definiere eine Klassenschnittstelle mit Operationen zum Erzeugen eines Objekts, aber lasse Unterklassen entscheiden, von welcher Klasse das zu erzeugende Objekt ist. Fabrikmethoden erm¨oglichen es einer Klasse, die Erzeugung von Objekten an eine Unterklasse zu delegieren.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Erzeugungsmuster: Singleton
Sichere ab, dass eine Klasse genau ein Exemplar besitzt, und stelle einen globalen Zugriffspunkt darauf bereit.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Strukturmuster: Adapter
Passe die Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle an. Das Adaptermuster l¨asst Klassen zusammenarbeiten, die wegen inkompatibler Schnittstellen ansonsten dazu nicht in der Lage w¨aren.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Strukturmuster: Dekorierer
Erweitere ein Objekt dynamisch um Zust¨andigkeiten. Dekorierer bieten eine flexible Alternative zur Unterklassenbildung, um die Funktionalit¨at einer Klasse zu erweitern.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Strukturmuster: Fassade
Biete eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems. Die Fassadenklasse definiert eine abstrakte Schnittstelle, welche die Verwendung des Subsystems vereinfacht.
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Verhaltensmuster: Beobachter
Definiere eine 1-zu-n-Abh¨angigkeit zwischen Objekten, so dass die ¨ Anderung des Zustands eines Objekts dazu f¨ uhrt, dass alle abh¨angigen Objekte benachrichtigt und automatisch aktualisiert werden.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Verhaltensmuster: Iterator
Biete eine M¨oglichkeit, um auf die Elemente eines zusammengesetzten Objekts sequentiell zugreifen zu k¨onnen, ohne die zugrundeliegende Repr¨asentation offenzulegen.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Verhaltensmuster: Strategie
Definiere eine Familie von Algorithmen, kapsele jeden einzelnen und mache sie austauschbar. Das Strategiemuster erm¨ oglicht es, den Algorithmus unabh¨angig von ihn nutzenden Klienten zu variieren.
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Ausblick
Quellen
Eine Warnung zum Schluss... Software-Entw¨urfe sollten so einfach wie m¨oglich sein. Wenn man ein Pattern ausgew¨ahlt hat, bleibt die Frage: Bietet mir der Entwurf mit dem Pattern erhebliche Vorteile bez¨ uglich • Flexibilit¨ at • Performance oder • Wiederverwertbarkeit? In Zweifelsf¨ allen w¨ ahlen Sie den einfacheren Weg. Karl Eilebrecht / Gernot Starke
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Referezen
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Quellen & Literatur I Freeman, Elithabeth und Eric: Head First - Design Patterns O’Reilly, Cambridge, 2004 Eilebrecht, Karl und Starke, Gernot: Patterns kompakt: Entwurfsmuster f¨ ur effektive Software-Entwicklung Spektrum, Heidelberg, 2010 http://dx.doi.org/10.1007/978-3-8274-2526-3 Gamma, Erich et.al: Entwurfsmuster Addison-Wesley, Bonn, 1996
Ausblick
Quellen
Einleitung
Das Decorator-Pattern
Das Observer-Pattern
Quellen & Literatur II
Ullenboom, Christian: Java ist auch eine Insel Galileo Press, Bonn, 2005
Ausblick
Quellen