Ein Muster ist eine Lösung eines Problems in einem bestimmten Kontext.
Merkspruch: Wenn Sie in einem bestimmten Kontext einem Problem gegenüberstehen und das Erreichen des Ziels nur mit gewissen Einschränkungen möglich ist, können Sie ein Muster anwenden, das zu einer Lösung für dieses Ziel und die zugehörigen Einschränkungen führt.
Musterkategorien:
Erzeugungsmuster beinhalten die Instantiierung von Objekten: sie alle bieten einen Weg, einen Client von den Objekten zu entkoppeln, die er instantiieren muss.
Verhaltensmuster haben all damit zu tun, wie Klassen und Objekte miteinander in Wechselwirkung stehen und die Zuständigkeiten untereinander aufteilen.
Strukturmuster ermöglichen die Zusammensetzung von Klassen oder Objekten zu größeren Strukturen.
Decorator
Packt ein Objekt ein und fügt dabei neues Verhalten hinzu
State
Kapselt zustandsbasiertes Verhalten und wechselt durch Delegieren zwischen den Verhaltensweisen.
Iterator
Bietet eine Möglichkeit, eine Sammlung von Objekten zu durchqueren, ohne die Implementierung der Sammlung zu offenbaren.
Facade
Vereinfacht die Schnittstelle für eine Gruppe von Klassen.
Strategy
Kapselt austauschbares Verhalten und entscheidet mittels Delegierung, welches Verhalten verwendet wird.
Proxy
Umschließt ein Objekt und kontrolliert so den Zugriff darauf
Factory Method
Unterklassen entscheiden, welche konkreten Klassen erzeugt werden.
Adapter
Umschließt ein Objekt und stellt eine andere Schnittstelle dafür zur Verfügung.
Observer
Ermöglicht die Benachrichtigung von Objekten, wenn sich eine Zustand ändert.
Template Method
Unterklassen entscheide, wie die Schritte ein einem Algorithmus implementiert werden.
Composite
Clients behandeln Sammlungen von Objekten und Einzelobjekten auf gleiche Weise.
Singleton
Sorgt dafür, dass nur genau ein Objekt erzeugt wird.
Abstract Factory
Ermöglicht des einem Client, Familien von Objekten zu erstellen, ohne konkrete Klassen anzugeben.
Command
Kapselt einen Auftrag als in Objekt.
Punkt für Punkt:
Definiert eine Familie von Algorithmen, kapselt sie einzeln und macht sie austauschbar. Das Stratgegy-Muster ermöglicht es, den Algorithmus unabhängig von den Clients variieren zu lassen, die ihn einsetzen.
Punkt für Punkt:
Definiert eine Eins-zu-viele-Abhängigkeit zwischen Objekten der Art, dass alle abhängigen Objekte automatisch benachrichtigt und aktualisier werden, wenn sich der Zustand des einen Objekts ändert.
Punkt für Punkt:
Fügt einem Objekt dynamisch zusätzliche Verantwortlichkeiten hinzu. Dekorierer bieten eine flexible Alternative zur Ableitung von Unterklassen zum Zweck der Erweiterung der Funktionalität.
Punkt für Punkt:
Factory Method
Definiert eine Schnittstelle zur Erstellung eines Objekts, lässt aber die Unterklassen entscheiden, welche Klassen instantiiert werden. Factory Method ermöglicht einer Klasse, die Instantiierung in Unterklassen zu verlagern.
Abstract Factory
Bietet eine Schnittstelle zum Erstellen von Familien verwandter oder zusammenhängender Objekte an, ohne konkrete Klassen anzugeben.
Punkt für Punkt:
Kapselt einen Auftrag als ein Objekt und ermöglicht so, andere Objekte mit verschiedenen Aufträgen zu parametrisieren, Aufträge in Warteschlangen einzureihen oder zu protokollieren oder das Rückgängigmachen von Operationen zu unterstützen.
Punkt für Punkt:
Adapter
Das Adapter-Muster konvertiert die Schnittstelle einer Klasse in die Schnittstelle, die der Client erwartet. Adapter ermöglichen die Zusammenarbeit von Klassen, die ohne nicht zusammenarbeiten könnten, weil sie inkompatible Schnittstellen haben.
Facade
Das Facade-Muster bietet eine vereinheitliche Schnittstelle für einen Satz von Schnittstellen eines Basissystems. Die Fassade definiert eine hochstufigere Schnittstelle, die die Verwendung des Basissystems vereinfacht.
Punkt für Punkt:
Definiert in einer Methode das Gerüst eines Algorithmus und überlässt einige Schritte den Unterklassen. Template Method erlaubt Unterklassen, bestimmte Schritte des Algorithmus neu zu definieren, ohne die Struktur des Algorithmus zu ändern.
Punkt für Punkt:
Bietet eine Möglichkeit, auf die Elemente in einem Aggregat-Objekt sequenziell zuzugreifen, ohne die zu Grunde liegende Implementierung zu offenbaren.
Punkt für Punkt:
Ermöglicht Ihnen, Objekten zu einer Baumstruktur zusammenzusetzen, um Teil/Ganzes-Hierarchien auszudrücken. Das Composite-Muster erlaubt den Clients, individuelle Objekte und Zusammensetzungen von Objekten auf gleiche Weise zu behandeln.
Punkt für Punkt:
Ein zusammengesetztes Muster kombiniert zwei oder mehrere Muster zur einer Lösung für ein wiederkehrendes oder allgemeines Problem.
Punkt für Punkt: