OOSE 8 Entwurfsmuster (Hörsaalübung) SS 2015 Birgit Demuth SS 2015 Softwaretechnologie / OOSE 8 Entwurfsmuster in Softwaretechnologie 2015 Prüfungsrelevant • • • • • • • • • • Composite Iterator Factory Method Class Adapter Object Adapter Observer Singleton State Strategy (Template Class) Template Method SS 2015 Weitere in Vorlesung • • • • • MVC Decorator Abstract Factory (Factory Class) Bridge (Dimensional Class Hierarchies) Varianten des Observers – – – – • • • Callback (push und pull) Pull Observer (Event Bridge) Push Observer Observer with ChangeManager (EventBus) Visitor Facade Proxy Softwaretechnologie / OOSE 8 Beispiel 1 • Stellt sicher, dass nur genau eine Instanz von GlobalResource erzeugt wird. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Strukturmuster Singleton • Name: Singleton (dt.: Einzelinstanz) • Problem: – Sicherstellung, daß von einer Klasse genau ein Objekt besteht. • Lösung: Singleton – theInstance: Singleton getInstance(): Singleton Expliziter Konstruktor wird (für andere Klassen) unbenutzbar gemacht! class Singleton { private static Singleton theInstance; private Singleton () {} public static Singleton getInstance() { if (theInstance == null) theInstance = new Singleton(); return theInstance; } } SS 2015 Softwaretechnologie / OOSE 8 Beispiel 2 • Es sollen alle Elemente (Einzelelemente und Elementgruppierungen) in einer verschachtelten Struktur gleich behandelt werden, so dass aus Sicht des Clients keine explizite Unterscheidung notwendig ist. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Structure Composite • Composite has an recursive n‐aggregation to the superclass Client * Component childObjects commonOperation() add(Component) remove(Component) getType(int) SS 2015 } Leaf Composite commonOperation() commonOperation() add(Component) remove(Component) getType(int) Pseudo implementations Softwaretechnologie / OOSE 8 for all g in childObjects g.commonOperation() Beispiel 3 • Es wird eine Schnittstelle für die Erzeugung von Objekten definiert. Die Entscheidung, welche konkrete Klasse zu instanziieren, zu konfigurieren und schließlich zurückzugeben ist, wird konkreten (Unter‐)Klassen überlassen, die diese Schnittstelle implementieren. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Structure for FactoryMethod • FactoryMethod is a variant of TemplateMethod Creator Product ConcreteProduct FactoryMethod() anOperation() ConcreteCreator FactoryMethod() SS 2015 ... Product = FactoryMethod() ... Softwaretechnologie / OOSE 8 return new ConcreteProduct Beispiel 4 • Es wird die Struktur eines Algorithmus definiert, wobei einzelne, konkrete Schritte in Unterklassen verlagert werden. Das Muster erlaubt es, bestimmte Operationen eines Algorithmus zu überschreiben, ohne dessen Struktur zu ändern. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 TemplateMethod Pattern • • • • Define the skeleton of an algorithm (template method) – The template method is concrete Delegate parts to abstract hook methods that are filled by subclasses Implements template and hook with the same class, but different methods Allows for varying behavior – Separate invariant from variant parts of an algorithm SS 2015 AbstractClass TemplateMethod() primitiveOperation1() primitiveOperation2() ConcreteClass primitiveOperation1() primitiveOperation2() Softwaretechnologie / OOSE 8 ... primitiveOperation1(); ... primitiveOperation2(); ... Beispiel 5 • Sie wollen einen Sortieralgorithmus unabhängig von nutzenden Clients austauschen. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Strategy (also called Template Class) hookObject TemplateClass HookClass (Strategy) templateMethod() hookMethod() hookObject.hookMethod() SS 2015 ConcreteHookValueA ConcreteHookValueB hookMethod() hookMethod() Softwaretechnologie / OOSE 8 Beispiel 6 • Es wird einem Objekt ermöglicht, sein Verhalten zu ändern, wenn sein interner Zustand ändert. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Strukturmuster State • Name: State (auch: Zustandsobjekte, Objects for States) • Problem: – Flexible und anpaßbare Möglichkeit, das Objektverhalten zu ändern, wenn sich ein interner Zustand ändert. • Lösung : Context request() setState (s: State) ruft state.handle auf SS 2015 State state {abstract} handle(){abstract} State1 State2 handle() handle() Softwaretechnologie / OOSE 8 ... Beispiel 7 • Sie müssen nacheinander alle Elemente einer aggregierten Struktur (z.B. Baum oder Liste) bearbeiten. Dazu müssen diese sequenziell geliefert werden, wobei unterschiedliche Traversierungsvarianten zum Einsatz kommen können. Die entsprechende Logik sollte außerhalb des Clients realisiert werden, um diesen von der Struktur zu entkoppeln. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Verhaltensmuster Iterator • Name: Iterator (auch: Stream, Cursor, Enumeration) • Problem: –Sequentielles Durchlaufen der Elemente eines zusammengesetzten Objekts. {abstract next()} • Lösung: hasNext() Aggregat e elements(): Iterator SS 2015 Iterator <<create> > Elemen t Softwaretechnologie / OOSE 8 ConcreteIterator Beispiel 8 • Sobald sich der Zustand eines bestimmten Objekts ändert, sollen andere Objekte ihren Zustand automatisch anpassen. Um welches Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Structure Observer Subject register(Observer) unregister(Observer) notify() observers * Observer update () for all b in observers { b.update () } ConcreteObserver Subject ConcreteSubject update () ObserverState getState() setState() SubjectState return SubjectState SS 2015 Softwaretechnologie / OOSE 8 ObserverState = Subject.getState() Beispiel 9 • Spezielle Listen sollen unter Wiederverwendung eines Collection‐Frameworks (hier java.util.*) implementiert werden. Um welche Muster handelt es sich? SS 2015 Softwaretechnologie / OOSE 8 Object Adapter Client Adapted class does not inherit from goal Goal operation() Decorator-like inheritance adapted Object Adapter operation() AdaptedClass specificOperation() adaptedObject.specificOperation() SS 2015 Object adapters use delegation Softwaretechnologie / OOSE 8 Class Adapter Client GoalClass AdaptedClass operation() specificOperation() Can also be interface (Implementation) Adapter operation() specificOperation() Instead of delegation, class adapters use multiple interitance SS 2015 Softwaretechnologie / OOSE 8 Beispiel 9 mit eingezeichneten Mustern SS 2015 Softwaretechnologie / OOSE 8 Lösung Beispiel Entwurfsmuster 1 Singleton 2 Composite 3 Factory Method 4 Template Method 5 Strategy (Template Class) 6 State 7 Iterator 8 Observer 9 Object Adapter und Class Adapter SS 2015 Softwaretechnologie / OOSE 8 Aufgabenübersicht SS 2015 Übung/ Hausaufgabe Aufgabe Design Pattern(s) U07 Bauteil Composite U07 MyCollection Iterator HA07 Stücklistenverwaltung Composite HA07 MyMatrix Objektadapter, Iterator ja HA07 RenovationProject Composite, Template Method ja U08 AudioClipManager Singleton U08 Queue Factory Method, Objektadapter, Klassenadapter(, Strategy) ja HA08 CoolIdeas State, Observer ja U12 EPost Template Method U13 Garagentor (Garage Door) State U14 Würfel Observer SS 2015 Softwaretechnologie / OOSE 8 Praktomat ja Weitere Praktomatsaufgaben Aufgabe Design Pattern(s) Predicate Iterator Factory Method, Iterator, Strategy(, Object Adapter) Vehicle Queue Factory Method, Singleton, Observer Part Management Factory Method, Observer Vocabulary Trainer State, Strategy Desktop Search Engine Iterator, Strategy Pricing Factory Method, Composite, Strategy Project Management Objektadapter, Composite , Strategy, Templete Method COOLIdeas State, Observer Hinweis: Lösungen zu Part Management und Vocabulary Trainer sind in [1] , S. 336 enthalten SS 2015 Softwaretechnologie / OOSE 8 Hilfe am Rechner gesucht? Lernraum jeweils montags 6. DS, E065 & Auditorium SS 2015 Softwaretechnologie / OOSE 8