Skip to content

Latest commit

 

History

History
190 lines (134 loc) · 11.6 KB

File metadata and controls

190 lines (134 loc) · 11.6 KB

Katalog der Entwurfsmuster

Zurück


Historisch gesehen wurde eine erste Aufstellung für Software Entwurfsmuster von den vier Autoren Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides im Jahre 1994 in einem Buch mit dem Titel "Design Patterns - Elemente wiederverwendbarer objektorientierter Software" gegeben.

Diese Autoren, zusammen auch als "Gang of Four" ("GOF") bekannt, nehmen hier eine Kategorisierung der von ihnen beschriebenen Entwurfsmuster in die drei Kategorien Erzeugungs-, Struktur- und Verhaltensmuster (Creational, Structural und Behavioral Design Patterns) vor. Eine Aufstellung der einzelnen Entwurfsmuster dieser Kategorien finden Sie nachstehend in Abbildung 1 vor:

Abbildung 1: Software Entwurfsmuster nach Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides ("GoF").

Speziell im Umfeld von Modern C++ haben sich folgende Entwurfsmuster etabliert (Abbildung 2):

Abbildung 2: Modern C++ Entwurfsmuster.

Die drei Klassiker für Entwurfsmuster in Anwendungen mit Oberflächen sind in Abbildung 3 zusammengestellt:

Abbildung 3: Entwurfsmuster für die Gestaltung von Oberflächen.

Entwurfsmuster nach Gamma, Helm, Johnson und Vlissides

Erzeugungsmuster

In der Softwareentwicklung sind Erstellungsmuster (so genannte Creational Pattern) Entwurfsmuster, die sich mit Objekterstellungsmechanismen befassen und in Situationen verwendet werden, in denen die klassischen Formen der Objekterzeugung zu Entwurfsproblemen führen oder die Komplexität des Codes erhöhen.

Muster Kurzbeschreibung
Simple Factory Das Simple Factory Pattern ist eine Vorgehensweise, Objekte zu erstellen, ohne die Erstellungslogik dem Client zur Verfügung zu stellen.
Factory Method Das Factory Method Entwurfsmuster ermöglicht die Erstellung von Objekten auf Basis einer Schnittstelle in einer Oberklasse, die es den Unterklassen erlaubt, den Typ der zu erstellenden Objekte zu konkretisieren.
Abstract Factory Das Abstract Factory Design Pattern dient der Definition einer zusammenhängenden Familie aus Produkten. Die Familien können elegant ausgetauscht werden.
Builder Ermöglicht schrittweises Erstellen komplexer Objekte.
Prototype Prototype Pattern – auch als Virtueller Konstruktor bezeichnet.
Singleton Das Singleton Entwurfsmuster sorgt dafür, dass es von einer Klasse nur eine einzige Instanz gibt.

Tabelle 1: Erzeugungsmuster (Creational Design Pattern).

Strukturmuster

Strukturmuster beschreiben, wie sich Objekte und Klassen zu größeren Strukturen zusammensetzen lassen, ohne dabei einen Verlust an Flexibilität und Effizienz einzugehen.

Muster Kurzbeschreibung
Adapter Ermöglicht die Interaktion von Objekten mit inkompatiblen Schnittstellen.
Bridge Aufteilung einer Reihe eng verwandter Klassen in zwei separate Hierarchien - Abstraktion und Implementierung.
Composite Pattern Ermöglicht es, einzelne Objekte und Gruppen von Objekten einheitlich zu betrachten und behandeln.
Decorator Hinzufügen neuen Verhaltens zu Objekten, indem diese Objekte in speziellen Hüllen-Objekten platziert werden, die dieses Verhalten besitzen.
Facade Bereitstellung einer vereinfachten Schnittstelle zu einer Bibliothek, einem Framework oder einer komplexen Menge von Objekten.
Flyweight Ermöglicht es, Objekte ressourcenschonend anzulegen, indem diese gemeinsame Zustandsdaten zwischen mehreren Objekten teilen, anstatt sie in jedem Objekt zu duplizieren.
Proxy Bereitstellung eines Platzhalters (Stellvertreters) für ein anderes Objekt.

Tabelle 2: Strukturmuster (Structural Design Pattern).

Verhaltensmuster

Verhaltensentwurfsmuster betrachten Algorithmen und der Aufteilung von Verantwortlichkeiten zwischen Objekten.

Muster Kurzbeschreibung
Chain of Responsibility Ermöglicht das Weiterleiten von Anforderungen entlang einer Kette von Objekten.
Command Pattern Das Command Entwurfsmuster ermöglicht die Entkopplung von Befehlen und Aufrufen. Auf elegante Weise können Befehle rückgängig gemacht, protokolliert oder in einer Warteschlange abgelegt werden.
Interpreter Das Interpreter Entwurfsmuster definiert eine Repräsentation für die Grammatik einer Sprache und die Möglichkeit, Sätze dieser Sprache zu interpretieren.
Iterator Abstraktion des Traversierens (Durchlaufens) von Elementen einer Datenstruktur, ohne die zugrunde liegende Darstellung (Liste, Array, Stapel, Baum usw.) zu kennen.
Mediator Das Mediator Muster ermöglicht ein kooperatives Verhalten von Objekten, wobei die beteiligten Objekte nicht direkt, sondern mit der Hilfe eines Vermittlers kooperieren.
Memento Das Memento Entwurfsmuster dient der Erfassung und Speicherung des internen Zustands eines Objektes.
Observer Das Observer Entwurfsmuster ist für Situationen geeignet, in denen ein oder mehrere Objekte benachrichtigt werden müssen, sobald sich der Zustand eines bestimmten Objekts ändert.
State Das State Entwurfsmuster ermöglicht die elegante Modellierung vom zustandsabhängigen Verhalten eines Objekts. Je nach internem Zustand ändert sich das Verhalten des Objekts, es scheint, als hätte das Objekt seine Klasse geändert.
Strategy Pattern Beschreibt eine Familie von Algorithmen und macht sie durch das Strategiemuster austauschbar.
Template Method Definiert das Grundgerüst eines Algorithmus in einer Oberklasse, lässt Unterklassen bestimmte Schritte des Algorithmus ausgestalten, ohne dabei Änderungen an der prinzipiellen Algorithmusstruktur zu gestatten.
Visitor Method Befasst sich mit der Trennung von Algorithmen von den Objekten, mit denen sie arbeiten.

Tabelle 3: Verhaltensmuster (Behavioral Design Pattern).

Weitere Entwurfsmuster

Neben diesen klassischen Entwurfsmustern finden sich in verschiedenen Publikationen weitere Gruppierungen von Entwurfsmustern. In Büchern über "Modern C++" stößt man häufig auf folgende Entwurfsmuster:

Muster Kurzbeschreibung
RAII Resource Acquisition Is Initialization
Opaque Pointer / Pimpl Pointer to implementation
Null Object Null Objekt
Intercepting Filter Pattern Intercepting Filter Pattern
Type Erasure Type Erasure
Policy-Based Design Policy-Based Design
SFINAE Substitution failure is not an error
CRTP Curiously recurring template pattern

Tabelle 4: Weitere Softwaremuster (Modern C++)

In der Softwareentwicklung beschreiben Concurrency Pattern jene Arten von Entwurfsmustern, die sich mit dem Multithreading-Programmierparadigma befassen:

Muster Kurzbeschreibung
Active Object Active Object Entwurfsmuster
Monitor Object Monitor Object Entwurfsmuster

Tabelle 5: Concurrency Pattern

Für den Entwurf von Oberflächen gibt es im Prinzip drei "Klassiker"

Muster Kurzbeschreibung
MVC Model-View-Controller
MVP Model-View-Presenter
MVVM Model View View-Model

Tabelle 6: Entwurfsmuster für Oberflächen

In einem weiteren Buch von Robert Nystrom, aktuell bei der Fa. Google in der Entwicklung der Programmiersprache Dart beschäftigt, finden sich weitere interessante Entwurfsmuster vor:

Muster Kurzbeschreibung
Double Buffer Vermeintliche Ausführung einer Reihe von aufeinanderfolgenden (sequentiellen) Vorgängen (quasi) unverzüglich oder (quasi) gleichzeitig.
Game Loop Entkopplung des Spieleverlaufs (Ablauf der Anwendung) von Benutzereingaben und Prozessorgeschwindigkeit.
Update Method Simulation des Anstoßes einer Aktivität bei einer Anzahl unabhängiger Objekte (Ausführung eines Frames in regelmäßigen Abständen).

Tabelle 7: Sequencing Patterns

sowie

Muster Kurzbeschreibung
Bytecode Schaffung von Flexibilität für die Daten, indem Sie sie als Anweisungen für eine virtuelle Maschine codieren.
Subclass Sandbox Definieren Sie das Verhalten in einer Unterklasse mithilfe einer Reihe von Operationen, die von der Basisklasse bereitgestellt werden.
Type Object Ermöglicht die flexible Erstellung neuer Klassen, indem Sie eine einzelne Klasse erstellen, von der jede Instanz einen anderen Objekttyp darstellt.

Tabelle 8: Behavioral Patterns

und

Muster Kurzbeschreibung
Component Ermöglicht einer einzelnen Entität, mehrere Domänen zu umfassen, ohne die Domänen miteinander zu koppeln.
Event Queue Entkoppelt die Verarbeitung einer Nachricht oder ein Ereignisses vom Zeitpunkt, zu dem sie gesendet (bzw. empfangen) wird.
Service Locator Stellt einen globalen Zugriffspunkt auf einen Dienst bereit, ohne Benutzer an eine konkrete Klasse zu koppeln, die den Service implementiert.

Tabelle 9: Decoupling Patterns

und

Muster Kurzbeschreibung
Data Locality Beschleunigen Sie den Speicherzugriff, indem Sie Daten so anordnen, dass das CPU-Caching genutzt wird.
Dirty Flag Vermeiden Sie unnötige Rechenzeit, indem Sie diese verschieben, bis das Ergebnis benötigt wird.
Object Pool Verbesserung von Rechenleistung und Speichernutzung, indem Objekte aus einem festen Pool wiederverwendet werden, anstatt sie einzeln anzufordern und freizugeben.
Spatial Partition Effizienter Zugriff auf Objekte, indem diese in einer nach ihren Positionen geordneten Datenstruktur gespeichert werden.

Tabelle 10: Optimization Patterns


std::enable_shared_from_this

Das Thema std::enable_shared_from_this wird in einigen Mustern speziell angesprochen:


Zurück