"The design patterns [in this book] are descriptions of communication objects and classes that are customized to solve a general design problem in a particular context."
[Gamma et al., 1995, S. 3]
Entwurfsmuster nach Gamma & Richard Helm & Ralph Johnson & John Vlissides sind wiederverwendbare Mikroarchitekturen, mit deren Hilfe Softwarearchitekturen und Frameworks entworfen werden können. Die Entwurfsmuster stellen das Ergebnis langjähriger Erfahrungen der beteiligten Autoren im Entwurf von Frameworks und Klassenbibliotheken dar, vor allem der ET++ Klassenbibliothek zur Erstellung grahphischer Anwendungen unter einer standardisierten Benutzungsoberfläche [Gamma, 1992]. Da die Beschreibung der Architektur großer Systeme mit Klassen zu feingranular ist, wurden höhere Strukturierungskonzepte gesucht und in Form von Entwurfsmuster gefunden.
Entwurfsmuster bestehen aus mehreren, miteinander interagierenden Klassen, die als allgemeine Bausteine zur Erzeugung größerer Strukturen benutzt werden können. Dreiundzwanzig dieser Entwurfsmuster, die hauptsächlich in der ET++ Klassenbibliothek entdeckt wurden, sind zu einem Entwurfsmusterkatalog [Gamma et al., 1995] zusammengefaßt. Nachfolgend wird das Strategy und das Observer Muster vorgestellt.
Jedes Entwurfsmuster wird durch vier Elemente charakterisiert:
[Gamma et al., 1995]
Die oben dargestellten Elemente der Entwurfsmusterbeschreibung werden im Katalog noch aufgeteilt und verfeinert und besteht aus den folgenden Elementen: Name, Intent, Also Known as, Motivation, Applicability, Structure, Participants, Collaboratioins, Consequences, Implementation, Sample Code, Known Use, Related Patterns. Diese Struktur ist für alle Muster identisch und erlaubt daher den direkten Vergleich und die Suche nach gewünschten Problem-Lösungspaaren. Durch die vorgegebene Aufteilung eignet sich diese Beschreibungsform auch für die Ablage und die Suche in Datenbankensystemen.
Bedingt durch die Art der Entwurfsmuster findet Wiederverwendung hier hauptsächlich auf kognitiver Ebene statt. Es handelt sich um semiformale, graphische Beschreibungen bestimmter Entwurfsprobleme, die im normalen Alltag umfangreicher Softwareprojekte auftreten. Dem Entwurfsmusterkatalog können mögliche Entwurfslösungen entnommen werden. Wird ein passendes Muster gefunden, so kann dies auf die Problemstellung angewendet werden. Mit Hilfe der Klassendiagramme eines Entwurfsmusters kann die Struktur der Lösung in die Analyse- und Designdiagramme der objektorientierten Modellierung übernommen werden. Anhand der Programmcodebeispiele kann die unterliegende Implementierung nachvollzogen werden.
Damit sind Entwurfsmuster in der Wiederverwendungshierarchie hinter den Quellcode-Komponenten mit objektorientierten Programmiersprachen aber vor den Softwarearchitekturen und Frameworks angesiedelt, da diese aus Entwurfsmustern konstruiert werden können. Einschränkungen sind, daß der Vorgang der Wiederverwendung hierbei auf der kognitiven Ebene stattfindet. Es gibt noch keine Möglichkeit, Entwurfsmuster mit Hilfe von Compilern oder Anwendungsgeneratoren in einem automatischen Prozeß auszuwählen, einzusetzen und in ausführbaren Programmcode übersetzen zu lassen. Dies ist auch nicht der Ansatz der Entwurfsmuster.
"Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it."
[Gamma et al., 1995, S. 315]
Das Entwurfsmuster Strategy wird dann angewendet, wenn eine Software mehrere gleichartige Algorithmen (gleiche Schnittstelle vorausgesetzt) zu unterschiedlichen Gelegenheiten einsetzen muß. Abbildung 15 zeigt eine mögliche Anwendung, in der verschiedene Zeilenumbruchalgorithmen in einer Anwendung verwendet werden (jede Zeile einzeln, Zeilenumbruch mit fester Anzahl von Zeichen pro Zeile, oder der TeX-Algorithmus).

Abbildung 15: Beispielproblemstellung für das Entwurfsmuster Strategy
Nach Gamma et al.[Gamma et al., 1995] kann das Entwurfsmuster Strategy bei folgenden Problemstellungen verwendet werden.
Die Problemstellung des Beispiels in Abbildung 15 wird nun zum Diagramm des Entwurfsmusters Strategy (Abbildung 16 ) verallgemeinert. Dadurch wird diese Struktur für alle ähnlichen Problemstellungen bereitgestellt.

Abbildung 16: Entwurfsmuster Strategy
Das im Kapitel 2.5 vorgestellte Model-View-Controllermodell kann mit einigen Entwurfsmustern nach Gamma et al.in kleinere Teilprobleme zerlegt werden. Das Problem der Entkopplung zwischen Model und View wird durch ein subscribe/notify Protokoll erreicht. Dabei wird bei einer änderung der Daten im Model jedes View dazu angestoßen, seine Darstellung zu aktualisieren. Allgemein spiegelt dieses Problem die Entkopplung beliebiger Objekte voneinander dar. Diese Form der Entkopplung wird durch das Observer Entwurfsmuster erreicht. Nach Gamma et al.hat es folgende Aufgabe: "Define a one-to-many dependency between objects, so that when one object changes stat, all its dependents are notified and updated automatically" [Gamma et al., 1995, S. 293]

Abbildung 17: Entwurfsmuster Observer
Das Observer Entwurfsmuster beruht auf zwei Objekten, dem subject und dem observer . Ein subject kann eine beliebige Anzahl von Abhängigen observern. Alle observer werden vom subject benachrichtigt, wenn sich der interne Zustand des subject ändert. Als Reaktion darauf, erfragt jeder observer den aktuellen Zustand des subject .
Die View-Controller Beziehung kann durch das oben dargestellte Strategy Entwurfsmuster gehandhabt werden. Ein bestimmter View kann eine Instanz eines Controllers verwenden und ein bestimmtes Verhalten auf Benutzereingaben zu erreichen. Um ein anderes Verhalten statisch dynamisch zu erhalten, kann der entsprechende Algorithmus mit Hilfe des Strategy Musters ausgewählt werden.
Die Entwurfsmuster haben hier also dazu beigetragen, die Software-Architektur Model-View-Controller näher aufzuschlüsseln und gute Entwurfsentscheidungen einzubringen, die die spätere Implementierung wesentlich verbessern. Dabei war es nicht nötig, die Erfahrungen mit solcher Art Entwurf zunächst selbst zu tätigen oder in umfangreichen Werken für die Programmierung von Benutzungsschnittstellen nachzulesen. Die Entwurfsmuster nach Gamma et al.geben immer die wichtigsten Anwendungsbereiche in Form von Beispielen an, so daß die möglichen Anwendungsbereiche recht schnell erkannt werden können. Entweder trifft ein vorhandenes Entwurfsproblem direkt auf ein oder mehrere Entwurfsmuster zu, oder man sucht ähnlichkeiten mit den dargestellten Beispielen zu entdecken.