Design Patterns (Entwurfsmuster) identifizieren, benennen und abstrahieren die Hauptaspekte wiederkehrender Verhaltensweisen oder Strukturen von Software. Somit beinhaltet die Definition eines Musters, eines sog. Patterns, die Beschreibung der Problemstellung, in deren Rahmen das Muster identifiziert wurde und zu deren Lösung es beitragen soll. Da bei Entwurfsmustern abstrakte Lösungen inklusive der Beschreibung der beteiligten Elemente und deren Beitrag zur Problemlösung angegeben werden, sind sie bei der Steigerung der Produktivität eines Programmierers hilfreich, weil sie angeben, wie ein Software-Problem zu lösen ist. Entwurfsmuster verkürzen den Weg des Software-Entwicklungsprozesses vom anfänglichen Designkonzept bis zur Implementierung. Entwurfsmuster sind durch folgende Elemente charakterisiert [GHJV95]: Name des Entwurfsmusters: Der Name des Entwurfsmusters wird zur intuitiven Beschreibung eines Musters benutzt. Aus der Beschreibung sollte die Aufgabe und der Anwendungsbereich des Musters hervorgehen. Ein Problem, das hierbei entsteht, ist die intuitive Namensgebung und die Suche nach passenden Mustern aus einer größeren Anzahl. Problem: Beschreibung des Problems, zu dessen Lösung ein Entwurfsmuster beitragen kann. Lösung: Die Lösung des beschriebenen Problems wird durch Klassendiagramme definiert. Ein Klassendiagramm zeigt die logische Struktur eines objektorientiertes Systems auf, also Klassen, die jeweilige Funktionalität einer Klasse und die Beziehungen zwischen den Klassen. Die Lösung wird sehr allgemein gehalten, damit sie auf möglichst viele variierende Problemstellungen anzuwenden ist. Zur Lösung gehören auch Beispielprogramme in einer objektorientierten Programmiersprache. Konsequenzen: Hier werden verschiedene Vor- und Nachteile des Entwurfsmusters dargestellt. Durch diese einheitliche Struktur sind Entwurfsmuster einfach zu erlernen, zu verstehen und zu verwenden. Zur Vereinfachung der Handhabung und Identifizierung von Entwurfsmustern werden diese auf verschiedene Arten gruppiert. Eine Möglichkeit einer Gruppierung ist die Strukturierung nach dem gemeinsamen Zweck der Entwurfsmuster. Diese können dabei in drei Kategorien eingeordnet werden: Erzeugende Muster, strukturelle Muster und verhaltensbezogene Muster. Erzeugende Muster (Creational Pattern) Erzeugende Muster abstrahieren den Instantiierungsprozess von Objekten. Es wird auf hart-kodierte Instanzen verzichtet, was zur Steigerung der Flexibilität bei der Erzeugung der Objekte zur Laufzeit führt: Factory (Variation der Erzeugungsart): erlaubt die Erzeugung zusätzlicher Komponenten. Strukturelle Muster (Structural Pattern) Strukturelle Muster beschreiben, wie Klassen und Objekte bei der Erstellung und Realisierung größerer Strukturen benutzt werden können: Adapter (Variation der Schnittstelle): Die Anpassung der Systemkomponenten wird durch einen Adapter gewährleistet. Composite (Variation der Granularität): Erlaubt die Aggregation mehrerer Komponenten zu einer neuen. Decorator (Variation des Verhaltens): Die Erweiterung des Verhaltens bzw. die Zuweisung einer neuen Rolle wird durch eine Ummantelung mit zusätzlichen Funktionen erlaubt. Bridge (Variation der Implementation): Erlaubt den Zugang zu verschiedenen Realisierungen ähnlicher Funktionalität unabhängig von der Schnittstelle. Verhaltensbezogene Muster (Behavioral Pattern) Verhaltensbezogene Muster beschreiben die Kommunikation zwischen den verschiedenen Objekten als eigenständiges Objekt. Chain of Responsability (Variation der Zuständigkeit): Erlaubt das Weiterreichen von Informationen in der Klassenhierarchie. Observer (Variation des Veränderungsverhaltens): Erlaubt die Überwachung und die Reaktion auf Veränderungen. Strategy (Variation der Funktionsweise): Ausgehend von einer allgemeinen Schnittstelle wird der Zugang zu mehreren Funktionsweisen erlaubt. Sommerlad [BMRS+96] fasst die wichtigsten Aspekte der Wiederverwendung bei Entwurfsmustern wie folgt zusammen: Ein Entwurfsmuster stellt die Lösung von stets wiederkehrenden Designproblemen dar, die in bestimmten Entwurfssituationen auftreten. Entwurfsmuster dokumentieren existierende und erprobte Designerfahrungen. Ein Entwurfsmuster identifiziert und beschreibt eine Abstraktionsweise, die über dem Niveau einzelner Klassen und Instanzen liegt. Eine Sammlung von Mustern bietet ein gemeinsames Designvokabular und Verständnis für eine Gruppe von Entwicklern. Entwurfsmuster helfen bei der Konstruktion und Dokumentation einer spezifischen Architektur mit wohldefinierten Eigenschaften. Bedingt durch die Art der Entwurfsmuster findet die Wiederverwendung hauptsächlich auf kognitiver Ebene statt. Es handelt sich lediglich um semi-formale Beschreibungen bestimmter Probleme, die in Software-Projekten auftreten können. Dem Katalog von Entwurfsmustern 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 des Programmbeispiels kann die zugrunde liegende Implementierung nachvollzogen werden. Damit sind Entwurfsmuster in der Wiederverwendungshierarchie unter den Quellcode-Komponenten mit objektorientierten Programmiersprachen, aber über den Software-Architekturen und Frameworks angesiedelt.