Entwurfsmuster: welche man kennt, welche man braucht
Entwurfsmuster: welche man kennt, welche man braucht
Artikel-Übersicht
Es gibt 23 klassische Entwurfsmuster, und die meisten Übersichten zählen sie der Reihe nach auf. Das hilft niemandem weiter, der wissen will, welche im Alltag tatsächlich vorkommen. Dieser Artikel sortiert stattdessen: Er erklärt zuerst, worin der eigentliche Wert von Mustern liegt — sie sind vor allem Vokabular für Entwurfsgespräche —, ordnet Herkunft und die drei Kategorien ein und liefert dann eine vollständige Tabelle mit deutschem Namen, Problem und einer Einschätzung der Alltagsrelevanz. Der Abschnitt, um den es eigentlich geht, kommt danach: welche Muster moderne Sprachen überflüssig gemacht haben und warum. Zum Schluss die Frage, wann ein Muster schadet, und die Abgrenzung zwischen Entwurfs- und Architekturmustern.
Was Entwurfsmuster sind
Ein Entwurfsmuster ist eine benannte, wiederkehrende Lösung für ein wiederkehrendes Entwurfsproblem. Es ist kein Baustein, den man einbaut, sondern eine Beschreibung, an der man sich orientiert.
Der Punkt, den Lehrbücher unterbetonen: Der größte Wert liegt im Namen. Wenn zwei Entwickler „das machen wir über eine Strategie" sagen, haben sie in fünf Wörtern eine Struktur vereinbart, für die sie sonst zehn Minuten gebraucht hätten. Muster sind in erster Linie ein Vokabular für Entwurfsgespräche und erst in zweiter Linie eine Bauanleitung.
Daraus folgt eine praktische Konsequenz: Man muss Muster erkennen können, um mitzureden — man muss sie nicht alle einsetzen. Die Hälfte dieses Artikels beschäftigt sich deshalb damit, welche man kennt, ohne sie zu benutzen.
Woher sie kommen
1994 erschien das Buch Design Patterns von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides — seitdem als Gang of Four bekannt. Es katalogisierte 23 Muster, die die Autoren in bestehenden objektorientierten Systemen wiederholt gefunden hatten.
Die Idee stammt allerdings nicht aus der Softwaretechnik. Der Architekt Christopher Alexander beschrieb 1977 in A Pattern Language Muster für Gebäude und Städte — mit demselben Aufbau: wiederkehrendes Problem, bewährte Lösung, Zusammenhang, in dem sie gilt. Die Gang of Four übertrug das Format.
Das erklärt auch, warum die Musterbeschreibungen so ausführlich sind: Bei Alexander ging es nie um Bauteile, sondern um Entscheidungen im Kontext.
Die drei Kategorien
Erzeugungsmuster befassen sich damit, wie Objekte entstehen — und wie man verhindert, dass der Aufrufer die konkrete Klasse kennen muss. Dazu gehören Factory Method, Abstract Factory, Builder, Prototype und Singleton.
Strukturmuster befassen sich damit, wie Objekte zu größeren Einheiten zusammengesetzt werden. Adapter, Decorator, Facade, Composite, Proxy, Bridge und Flyweight.
Verhaltensmuster befassen sich damit, wie Objekte zusammenarbeiten und Verantwortung verteilen. Strategy, Observer, Command, State, Template Method, Iterator, Visitor, Chain of Responsibility, Mediator, Memento und Interpreter.
Die Einteilung ist nützlich zum Nachschlagen und sagt nichts über die Wichtigkeit. Die im Alltag häufigsten Muster verteilen sich über alle drei Gruppen.
Die Muster im Überblick
Vollständig, mit deutschem Namen — der in Prüfungen und Lehrplänen vorkommt, im Code aber praktisch nie — und einer Einschätzung, wie oft man ihnen wirklich begegnet.
| Muster | Deutsch | Kategorie | Problem in einem Satz | Alltag |
|---|---|---|---|---|
| Strategy | Strategie | Verhalten | austauschbares Verhalten ohne Fallunterscheidung | hoch |
| Adapter | Adapter | Struktur | zwei inkompatible Schnittstellen verbinden | hoch |
| Observer | Beobachter | Verhalten | mehrere Interessenten über Änderungen informieren | hoch |
| Facade | Fassade | Struktur | ein einfacher Zugang zu einem komplexen Teilsystem | hoch |
| Decorator | Dekorierer | Struktur | Verhalten zur Laufzeit ergänzen, ohne zu erben | mittel |
| Builder | Erbauer | Erzeugung | Objekte mit vielen optionalen Feldern erzeugen | mittel |
| Command | Befehl | Verhalten | eine Aktion als Objekt behandeln | mittel |
| State | Zustand | Verhalten | Verhalten abhängig vom inneren Zustand | mittel |
| Template Method | Schablonenmethode | Verhalten | Ablauf festlegen, Schritte offen lassen | mittel |
| Abstract Factory | Abstrakte Fabrik | Erzeugung | ganze Produktfamilien austauschen | mittel |
| Proxy | Stellvertreter | Struktur | Zugriff kontrollieren oder verzögern | mittel |
| Composite | Kompositum | Struktur | Baumstrukturen einheitlich behandeln | mittel |
| Chain of Responsibility | Zuständigkeitskette | Verhalten | Anfrage durch eine Kette von Bearbeitern schicken | mittel |
| Factory Method | Fabrikmethode | Erzeugung | Erzeugung an Unterklassen delegieren | gering |
| Singleton | Einzelstück | Erzeugung | genau eine Instanz sicherstellen | gering |
| Iterator | Iterator | Verhalten | über eine Sammlung laufen, ohne ihren Aufbau zu kennen | gering |
| Visitor | Besucher | Verhalten | Operationen von der Struktur trennen | gering |
| Mediator | Vermittler | Verhalten | Kommunikation zwischen Objekten bündeln | gering |
| Memento | Erinnerung | Verhalten | Zustand sichern und wiederherstellen | gering |
| Bridge | Brücke | Struktur | Abstraktion und Implementierung getrennt entwickeln | gering |
| Flyweight | Fliegengewicht | Struktur | viele gleichartige Objekte speichersparend halten | gering |
| Prototype | Prototyp | Erzeugung | neue Objekte durch Kopieren erzeugen | gering |
| Interpreter | Interpreter | Verhalten | eine kleine Sprache auswerten | gering |
Zwei Muster, die nicht bei der Gang of Four stehen und im Alltag häufiger vorkommen als die untere Hälfte dieser Tabelle:
| Muster | Problem | Alltag |
|---|---|---|
| Dependency Injection | Abhängigkeiten von außen hereingeben statt selbst erzeugen | sehr hoch |
| Repository | Datenzugriff hinter einer fachlichen Schnittstelle kapseln | hoch |
Die vier meistgesuchten Muster — Factory, Adapter, Strategy und Visitor — behandle ich einzeln und mit Code in Factory, Adapter, Strategy, Visitor: vier Muster im Detail.
Die Muster, die man heute weglässt
Der Abschnitt, den kein Nachschlagewerk hat. Vier Muster, deren Problem moderne Sprachen bereits lösen — mit Begründung, nicht nur mit Urteil.
Singleton. Das Muster stellt sicher, dass es genau eine Instanz gibt. In der Praxis ist es meist ein globaler Zustand mit besserem Namen: schwer zu testen, weil man ihn nicht ersetzen kann, und schwer nachzuvollziehen, weil die Abhängigkeit nirgends sichtbar ist. Dependency Injection löst dasselbe Problem besser — ein Objekt wird einmal erzeugt und überall hineingegeben, wo es gebraucht wird. Der Unterschied: Die Abhängigkeit steht im Konstruktor, ist also sichtbar und ersetzbar.
Iterator. In jeder modernen Sprache eingebaut. Eine Schleife über eine Sammlung ist Sprachmittel, kein Entwurf. Das Muster zu kennen lohnt trotzdem — es erklärt, warum die Schleife funktioniert.
Factory Method. In Sprachen mit Funktionen erster Klasse ist die Fabrikmethode oft eine Funktion. Statt einer abstrakten Klasse mit einer überschriebenen Erzeugungsmethode übergibt man eine Erzeugerfunktion als Parameter. Abstract Factory bleibt relevant, wenn tatsächlich ganze Produktfamilien wechseln — das ist der seltenere Fall.
Command. Wo das Muster nur dazu diente, eine Aktion als Objekt herumzureichen, tut es heute eine Closure. Relevant bleibt es, wenn zur Aktion Metadaten gehören — Rückgängigmachen, Protokollieren, Serialisieren, Wiederholen. Dann ist ein Objekt die richtige Form.
Der gemeinsame Nenner: Diese Muster lösten Probleme, die aus den Beschränkungen von C++ und frühem Java stammten. Sprachen mit Funktionen erster Klasse, Musterabgleich und eingebauter Iteration brauchen sie seltener. Das Muster zu kennen bleibt nützlich; es einzubauen ist es oft nicht.
Wann ein Muster schadet
Drei Fehlerbilder, die man in Codebasen regelmäßig findet:
Verfrühte Abstraktion. Eine Strategie mit genau einer Implementierung ist eine Indirektion ohne Nutzen. Die Rechtfertigung lautet „falls später mehr kommt" — meist kommt nichts, und bis dahin muss jeder Leser eine Ebene mehr durchdringen.
Das Muster als Selbstzweck. Erkennbar an Klassennamen, die den Musternamen tragen, ohne dass das Muster etwas löst: OrderFactoryStrategyProvider. Wenn der Name mehr über den Entwurf als über die Fachlichkeit aussagt, stimmt die Reihenfolge nicht.
Musterkrankheit. Der Zustand, in dem jedes Problem als Anwendungsfall eines bekannten Musters gesehen wird. Sie tritt typischerweise ein bis zwei Monate nach der Lektüre des Buches auf und verschwindet mit Erfahrung.
Die Regel dahinter: Ein Muster löst ein Problem, das man hat — nicht eines, das man erwartet.
Entwurfsmuster und Architekturmuster
Zwei Ebenen, die häufig vermischt werden:
| Entwurfsmuster | Architekturmuster | |
|---|---|---|
| Ebene | Klassen und Objekte | Module, Dienste, Systeme |
| Beispiele | Strategy, Adapter, Observer | Schichtenarchitektur, Hexagonal, Microservices, ereignisgetrieben |
| Reichweite | innerhalb einer Komponente | über Komponentengrenzen hinweg |
| Änderungskosten | Refactoring | Umbau bis Migration |
Die Architekturebene behandle ich getrennt: die Struktur innerhalb eines Systems in Clean Architecture, den fachlichen Schnitt in Domain-Driven Design in der Praxis und die Verteilung in Microservices oder Monolith.
Ein Sonderfall sind die Muster für verteilte Systeme — Saga, Outbox, Circuit Breaker. Sie sehen aus wie Entwurfsmuster, wirken aber auf Architekturebene und haben entsprechend andere Kosten. Sie stehen in Microservices bauen.
Muster für Schnittstellen
Auch beim Entwurf von Schnittstellen gibt es wiederkehrende Lösungen — Paginierung, Fehlerformate, Versionierung, Idempotenzschlüssel. Sie tragen selten Namen wie die GoF-Muster, funktionieren aber genauso: bewährte Antworten auf wiederkehrende Fragen. Sie stehen in API-Design: Schnittstellen entwerfen, die man nicht bereut.
Weiterführendes
Das GoF-Buch ist die Quelle, aber kein Einstieg — es liest sich wie ein Katalog, weil es einer ist. Wer die Muster lernen will, ist mit Head First Design Patterns deutlich besser bedient; es erklärt jedes Muster an einem durchgehenden Beispiel und ist auch nach zwanzig Jahren die freundlichste Einführung.
Als Nachschlagewerk hat sich refactoring.guru durchgesetzt: vollständig, gut illustriert, mehrsprachig. Dieser Artikel will kein Ersatz dafür sein — er will das leisten, was ein Katalog nicht kann, nämlich gewichten.
Häufige Fragen
Was sind Entwurfsmuster? Benannte, wiederkehrende Lösungen für wiederkehrende Entwurfsprobleme. Ihr größter Wert liegt im gemeinsamen Vokabular für Entwurfsgespräche.
Welche Entwurfsmuster gibt es? 23 klassische Muster in drei Kategorien: Erzeugung, Struktur, Verhalten. Dazu kommen im Alltag Dependency Injection und Repository, die nicht im ursprünglichen Katalog stehen.
Was sind die Gang of Four? Die vier Autoren des Buchs Design Patterns von 1994: Gamma, Helm, Johnson und Vlissides.
Sind Entwurfsmuster heute noch relevant? Als Vokabular ja, uneingeschränkt. Als Bauanleitung nur teilweise — vier Muster lösen Probleme, die moderne Sprachen bereits gelöst haben.
Wann setzt man ein Muster ein? Wenn man das Problem hat, für das es gemacht ist. Nicht, wenn man es erwartet.
Was ist der Unterschied zwischen Entwurfsmuster und Architekturmuster? Die Reichweite. Entwurfsmuster wirken innerhalb einer Komponente, Architekturmuster über Komponentengrenzen hinweg — mit entsprechend höheren Änderungskosten.
Zusammenfassung und praktische Tipps
Entwurfsmuster sind ein Werkzeugkasten, dessen Wert vor allem in der gemeinsamen Sprache liegt. Die wichtigsten Punkte:
- Muster sind Vokabular, bevor sie Bauanleitung sind. Erkennen ist wichtiger als einsetzen.
- Vier Muster sind heute meist überflüssig: Singleton, Iterator, Factory Method und Command in ihrer einfachen Form.
- Zwei Muster fehlen im klassischen Katalog und sind häufiger als die halbe Liste: Dependency Injection und Repository.
- Strategy, Adapter, Observer und Facade sind die vier, die man wirklich beherrschen sollte.
- Ein Muster mit genau einer Implementierung ist eine Indirektion ohne Nutzen.
- Deutsche Musternamen stehen in Prüfungen, englische im Code. Beide zu kennen schadet nicht.
Mein Rat für den Einstieg: Lern vier Muster richtig statt 23 oberflächlich — Strategy, Adapter, Observer und Facade decken den größten Teil dessen ab, was im Alltag vorkommt. Die übrigen liest du nach, wenn sie dir begegnen. Und wenn du versucht bist, ein Muster einzubauen, frag dich, welches konkrete Problem gerade weh tut. Fällt dir keines ein, brauchst du es noch nicht.
Ressourcen
- refactoring.guru – Entwurfsmuster – vollständiges Nachschlagewerk, auf Deutsch verfügbar
- Head First Design Patterns – die freundlichste Einführung, mit durchgehendem Beispiel
- Design Patterns (Gang of Four) – das Original von 1994
- A Pattern Language – Christopher Alexanders Ursprungswerk aus der Architektur