Entwurfsmuster

Wenn man die Prinzipien und Methoden des objekt-orientierten Entwurfs sicher beherscht, stellt man fest, dass einige Entwurfsmuster immer wieder auftauchen. Es bietet sich also die Chance, auch in der der Entwurfsphase bewährte Problemlösungen wiederzuverwenden. Es entstehen derzeit Kataloge für Entwurfsmuster, vergleichbar mit den "Musterbüchern"  anderer Ingenieurdisziplinen, in denen diese Lösungen aufgezählt und beschrieben sind. So finden sich z.B. in Gamma/Helm/Johnson/Vlissides (S. 9 ff) die untenstehenden 24 Entwurfsmuster, die - ihrer Aufgabe entsprechend - einem der Bereiche Erzeugung, Struktur und Verhalten zugeordnet sind. Jedes dieser Entwurfsmuster wird dort ausführlich nach folgender Struktur beschrieben: Zweck, Synonyme, Motivation, Anwendbarkeit, Struktur, Teilnehmer, Interaktionen, Konsequenzen, Implementierung, Beispielcode, bekannte Verwendungen, verwandte Muster.
 

Gängige Entwurfsmuster

Erzeugung

Abstrakte Fabrik (Abstract Factory)
Biete eine Schnittstelle zum Erzeugen von Familien verwandter oder voneinander abhängiger Objekte, ohne ihre konkreten Klassen zu benennen.
Erbauer (Builder)
Trenne die Konstruktion eines komplexen Objektes von seiner Representation, so daß derselbe Konstruktionsprozess unterschiedliche Repräsentationen erzeugen kann.
Fabrikmethode (Factory method)
Definiere eine Klassenschnittstelle mit Operationen zum Erzeugen eines Objekts, aber lasse Unterklassen entscheiden, von welcher Klasse das zu erzeugende Objekt ist. Fabrikmethoden ermöglichen es einer Klasse, die Erzeugung von Objekten an Unterklassen zu delegieren.
Prototyp (Prototype)
Bestimme die Arten zu erzeugender Objekte durch die Verwendung eines prototypischen Exemplars, und erzeuge neue Objekte durch Kopieren dieses Prototypen.
Singleton
Sichere ab, dass eine Klasse nur ein Exemplar besitzt, und stelle einen globalen Zugriffspunkt darauf bereit.

Struktur

Adapter
Passe die Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle an. Das Adaptermuster lässt Klassen zusammenarbeiten, die wegen inkompatibler Schnittstellen ansonsten nicht dazu in der Lage wären.
Brücke (Bridge)
Entkopple eine Abstraktion von ihrer Implementierung, so dass beide unabhängig voneinander variiert werden können.
Dekorierer (Decorator)
Erweitere ein Objekt dynamisch um Zuständigkeiten. Dekorierer bieten eine flexible Alternative zur Unterklassenbildung, um die Funktionalität einer Klasse zu erweitern.
Fassade (Facade)
Biete eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems. Die Fassadenklasse definiert eine abstrakte Schnittstelle, welche die Verwendung des Systems vereinfacht.
Fliegengewicht (Flyweight)
Nutze Objekte kleinster Granularität gemeinsam, um grosse Mengen von ihnen effizient verwenden zu können.
Kompositum (Composite)
Füge Objekte zu Baumstrukturen zusammen, um Teil-Ganzes-Hierarchien zu repräsentieren. Das Kompositionsmuster ermöglicht es Klienten, einzelne Objekte sowie Kompositionen von Objekten einheitlich zu behandeln.
Proxy
Kontrolliere den Zugriff auf ein Objekt mit Hilfe eines vorgelagerten Stellvertreterobjekts.

Verhalten

Befehl (Command)
Kapsle einen Befehl als ein Objekt. Dies ermöglicht es, Klienten mit verschiedenen Anfragen zu parametrieren, Operationen in eine Queue zu stellen, ein Logbuch zu führen und Operationen rückgängig zu machen.
Beobachter (Observer)
Definiere eine 1-zu-n-Abhängigkeit zwischen Objekten, so dass die Änderung des Zustands eines Objekts dazu führt, dass alle abhängigen Objekte benachrichtigt und automatisch aktualisiert werden.
Besucher (Visitor)
Kapsle eine auf den Elementen einer Objektstruktur auszuführende Operation als ein Objekt. Das Besuchermuster ermöglicht es, eine neue Operation zu definieren, ohne die Klassen der von ihr bearbeiteten Elemente zu verändern.
Interpreter
Definiere für eine gegebene Sprache eine Repräsentation der Grammatik sowie einen Interpreter, der Repräsentation nutzt, um Sätze in der Sprache zu interpretieren.
Iterator (Iterator)
Ermögliche den sequentiellen Zugriff auf die Elemente eines zusamengesetzten Objektes, ohne seine zugrundeliegende Repräsentation offenzulegen.
Memento
Erfasse und externalisiere den internen Zustand eines Objektes, ohne seine Kapselung zu verletzen, so dass das Objekt später in diesen Zustand zurückversetzt werden kann.
Schablonenmethode (Template Method)
Definiere das Skelett eines Algorithmus in einer Operation und delegiere einzelne Schritte an Unterklassen. Die Verwendung einer Schablonenmethode ermöglicht es Unterklassen, bestimmte Schritte eines Algorithmus zu überschreiben, ohne seine Struktur zu verändern.
Strategie (Strategy)
Definiere eine Familie von Algorithmen, kapsele jeden einzelnen und mache sie austauschbar. Das Strategiemuster ermöglicht es, den Algorithmus unabhängig von ihn nutzenden Klienten zu variieren.
Vermittler (Mediator)
Definiere ein Objekt, welches das Zusammenspiel einer Menge von Objekten in sich kapselt. Vermittler fördern lose Kopplung, indem sie Objekte davon abhalten, aufeinander explizit Bezug zu nehmen. Sie ermöglichen es ihnen, das Zusammenspiel der Objekte von ihnen unbhängig zu variieren.
Zustand (State)
Ermöglicht es einem Objekt, sein Verhalten zu ändern, wenn sein interner Zustand sich ändert. Es wird so aussehen, als ob das Objekt seine Klasse gewechselt hat.
Zuständigkeitskette (Chain of Responsibility)
Vermeide die Kopplung des Auslösers einer Anfrage an seinen Empfänger, indem mehr als ein Objekt die Möglichkeit erhält, die Anfrage zu erledigen. Verkette die empfangenden Objekte, und leite die Anfrage an der Kette entlang, bis ein Objekt sie erledigt.