| Typ | Konzept |
|---|---|
| Quellen | Quelle - Effektive Softwarearchitekturen |
| Erstellt | 2026-09-27 |
| Aktualisiert | 2026-09-27 |
| Tags | softwarearchitektur, entwurfsmuster, design-patterns, gof |
Bewährte, benannte Lösungen für wiederkehrende Entwurfsprobleme im Kleinen, bekannt vor allem durch das Buch der „Gang of Four“ (Gamma u. a. 1995). Beispiele sind Adapter, Beobachter, Dekorierer, Stellvertreter, Fassade und Zustand. Sie verkürzen Diskussion und Dokumentation, machen einen Entwurf aber auch komplexer.
Nutzen und Vorsicht
Muster schaffen ein gemeinsames Vokabular. Mit ihnen lassen sich komplexe Strukturen in wenigen Worten beschreiben. Manchmal reichen fünf Seiten Entwurfsdokumentation statt fünfzig (Quelle - Effektive Softwarearchitekturen, S. 133).
Aber: Muster führen zusätzliche Abstraktionen ein. Schlichtheit kann wichtiger sein als Flexibilität. Im Zweifel die einfache Lösung wählen und die Entscheidung dokumentieren (S. 133, Entwurfsprinzip).
Die Muster im Buch
| Muster | Zweck |
|---|---|
| Adapter | passt die Schnittstelle einer Klasse an die von einem Nutzer erwartete an, damit sonst unverträgliche Klassen zusammenarbeiten (S. 133) |
| Beobachter (Observer) | Objekte melden sich bei einem Subjekt an und werden bei Änderungen benachrichtigt; Grundlage von MVC und Publish-Subscribe (S. 134) |
| Dekorierer (Decorator) | erweitert ein Objekt dynamisch um Verhalten, ohne seine Klasse zu ändern |
| Stellvertreter (Proxy) | ein Platzhalter steuert den Zugriff auf ein anderes Objekt, etwa für Fernzugriff, Caching oder Rechteprüfung |
| Fassade | bietet eine einfache Schnittstelle zu einem komplexen Subsystem (S. 137); im MaMa-Beispiel kapselt eine Fassade das Archivsystem |
| Zustand (State) | ein Objekt ändert sein Verhalten mit seinem Zustand; jeder Zustand ist eine eigene Klasse (S. 138) |
Muster gibt es auch für Fehlerbehandlung (etwa „Log at Distribution Boundary“), Persistenz (DAO, SQL) und Integration (Hohpe und Woolf) sowie für Sicherheit (Informationssicherheit).
Das Beobachter-Muster ist der Kern von RxJS: Ein Observable ist ein Subjekt, subscribe() meldet den Beobachter an (Reaktive Programmierung, RxJS). Auch Dependency Injection ist ein Muster, das Abhängigkeiten von aussen liefert statt sie im Code zu erzeugen.
Verwandt
- Architekturstil – Muster im Grossen
- Entwurfsprinzip – Prinzipien hinter den Mustern
- Dependency Injection – weiteres verbreitetes Muster
- Reaktive Programmierung – Beobachter-Muster in RxJS
