Entwurfsmuster: welche man kennt, welche man braucht

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