unterstützen Erzeugen komplexer Objekte (Kapselung v. Erzeugungsprozess)
hohe Flexibilität & Wiederverwendbarkeit
Structural Patterns
erleichtern Entwurf von Software - Vorgabe v. Bzh. zw. Klassen
Zusammensetzen v. Objekten & Klassen zu größeren Strukturen
Behavioral Patterns
modellieren Verhalten unter Softwaresystemen - Interaktionen zw. Objekten
Zuweisung v. Verantwortlichkeit zw. Objekten
Wir haben folgene Patterns durchgemacht:
Creational
Structural
Behavioral
Singleton
Adapter
Strategy
Factory
Decorator
Command
# Patterns
# Singleton
Definiert Klassenstruktur, die nur Erzeugen einer einzigen Instanz erlaubt.
Kontrollierter Zugriff auf Instanz d. Klasse
Zugriff:
# Factory
Entkoppelung zw. Objektverarbeitung & Objekterzeugung.
Anstatt in Client-Klasse direkt Objekte zu erstellen - Delegierung zu Erstellung an Factory.
Vereinfacht Erstellung von komplexen Objekten
Wiederverwendbarkeit
einfach erweiterbar
ODER: Eine Methode/Klasse, die Objekte eines bestimmten Typs erzeugt & zurückgibt.
Aufruf unserer Factory:
# Adapter
Vermittler zw. mehreren Klassen.
Dient als “Übersetzer”.
Schnittstelle eines Objektes kann zur Laufzeit geändert werden.
Bsp.: Gans kann nicht quacken
mit Adapter - wenn wir sagen “quack”, wird durch Adapter zu “honk” übersetzt
Verwendung:
Testfrage: Was muss ich machen, um einen Adapter zu implementieren?
Interface (IQuackable) definieren
Andere Klasse (Goose) mit anderer Funktionalität & Interface definieren
Adapter Klasse erstellen
diese übernimmt zu übersetzendes Interface (IQuackBehaviour)
in Adapter-Class die Methode der ursprünglichen Klasse aufrufen (Goose - Honk()) - muss allerdings an Quack() angepasst werden
Testfrage: Wenn wir das Aufrufen, was machen dann die anderen?
Die anderen Duck-Arten implementieren direkt das IDuckBehaviour - haben daher deren eigene Quack()
Nur bei der Goose muss dies konvertiert werden, weil eine Gans nicht quacken kann
# Decorator
Verhalten von Objekten kann zur Laufzeit verändert werden - oft ist das sogar notwendig.
Decorator haben gleichen Datentyp, wie Objekte, die sie dekorieren
stellvertretend für dekorierendes Objekt
Bsp.: Wir haben Winkler & hängen ihm Schmuck um (Dekoration)
Bsp.: Ente: mit Decorator - ich mache das, was Ente macht und mit etwas noch dazu.
Hinzufügen v. zusätzlichen Funktionalitäten
Verwendung:
# Command
Um Methoden wie Objekt zu verwenden.
Methodenobjekte in Warteschlangen, Logbucheinträge, Auswirkungen v. Methode rückgängig machen.
Pro command gibt es eine Klasse.
Bsp.: public class MoveUpCommand > public void Process()
In Bsp. ACommand - sollte ICommand implementieren
In Bsp. wird ein Stack<> verwendet
Bsp.: Strg+Z - kann mit Command Pattern implementiert werden.
In diesem Beispiel:
Fernbedienung interagiert nicht direkt mit Fernseher, sondern über Command-Objekte
Es können neue Commands hinzugefügt werden, ohne Fernbedienung/Fernseher umschreiben zu müssen
Verwendung:
# Strategy
Ermöglicht Verhaltensänderung eines Objektes zur Laufzeit.
Verhalten von Klasse - in eigene Klasse. Immer eine Entscheidung - entweder das eine/andere
Bsp.: Bezahlvorgang - kann beliebige Klasse für Bezahlen verwenden
Bezahlvorgang = Strategie; kann bei jedem Vorgang beliebig gewählt werden