GoF Design Patterns
Details
- Vollständiger Name
-
Gang of Four Design Patterns
- Auch bekannt als
-
Design Patterns, Gang of Four Patterns
Kernkonzepte:
- Erzeugungsmuster
-
Abstract Factory, Builder, Factory Method, Prototype, Singleton — Mechanismen zur Objekterzeugung
- Strukturmuster
-
Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy — Objektkomposition und Beziehungen
- Verhaltensmuster
-
Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor — Objektinteraktion und Verantwortlichkeiten
- Pattern-Sprache
-
Gemeinsames Vokabular zur Kommunikation wiederkehrender Entwurfsprobleme und bewährter Lösungen
- Komposition vor Vererbung
-
Objektkomposition für Flexibilität gegenüber starren Klassenhierarchien bevorzugen
- Gegen ein Interface programmieren
-
Von Abstraktionen abhängen statt von konkreten Implementierungen
- Für Veränderung entwerfen
-
Identifiziere, was sich in deinem Entwurf ändert, und kapsle es
- Schlüsselvertreter
-
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides ("Design Patterns: Elements of Reusable Object-Oriented Software", 1994)
Wann zu verwenden:
-
Objektorientierter Entwurf, der bewährte Lösungen für wiederkehrende Probleme erfordert
-
Kommunikation von Entwurfsentscheidungen mit einem gemeinsamen Vokabular
-
Vermittlung objektorientierter Entwurfsprinzipien anhand konkreter Beispiele
-
Refactoring von Code zur Erhöhung von Flexibilität und Wiederverwendbarkeit
Verwandte Anker:
-
SOLID Principles - Entwurfsprinzipien, deren Umsetzung GoF-Patterns unterstützen
-
Fowler Patterns - Architekturmuster für Unternehmensanwendungen (komplementärer Umfang)
-
Clean Architecture - Architekturstil, der GoF-Prinzipien nutzt
Kritik:
-
Peter Norvig, "Design Patterns in Dynamic Languages" (1996/1998) — 16 der 23 Patterns haben in Lisp oder Dylan eine "qualitativ einfachere Implementierung" als in C++ oder verschwinden ganz in der Sprache: Viele Patterns kompensieren fehlende Sprachfeatures, statt universelle Designweisheit festzuhalten
-
Paul Graham, "Revenge of the Nerds" (2002) — wiederkehrende Patterns können Belege für den "menschlichen Compiler bei der Arbeit" sein: "When I see patterns in my programs, I consider it a sign of trouble" — ein Zeichen, dass die Abstraktionen der Sprache nicht mächtig genug sind
-
Die Autoren selbst behandeln den Katalog als Momentaufnahme von 1994, nicht als geschlossenen Kanon: Im InformIT-Interview von 2009 diskutieren sie, wie sie ihn heute umbauen und kürzen würden (siehe auch die Kritik bei Singleton)