Design-Muster

Ein Entwurfsmuster ist die wiederverwendbare Form einer Lösung für ein Designproblem. Die Idee wurde vom Architekten Christopher Alexander eingeführt und wurde für verschiedene andere Disziplinen angepasst, vor allem für die Informatik.

Software-Design-Muster
Softwaredesignmuster sind Vorschläge für allgemeine Lösungen, die entwickelt wurden, um ähnliche Probleme zu lösen, die beim Softwaredesign häufig auftreten. Obwohl Software-Entwurfsmuster im Allgemeinen unabhängig von Programmiersprachen definiert werden, sind Software-Entwurfsmuster, die für objektorientierte Programmiersprachen geeignet sind, häufiger bekannt. Diese Muster zeigen die Beziehungen und Interaktionen zwischen Objekten und Klassen. Der Programmierer kann ein Designmuster anpassen, indem er das Problem in seiner Hand betrachtet.

Einzelheiten
Eine organisierte Sammlung von Entwurfsmustern, die sich auf ein bestimmtes Feld beziehen, wird als Mustersprache bezeichnet. Diese Sprache gibt eine gemeinsame Terminologie für die Diskussion der Situationen, mit denen Designer konfrontiert sind.

Die Elemente dieser Sprache sind Entitäten, die Muster genannt werden. Jedes Muster beschreibt ein Problem, das in unserer Umgebung immer wieder auftritt, und beschreibt dann den Kern der Lösung für dieses Problem, so dass Sie diese Lösung millionenfach verwenden können, ohne dass Sie es zweimal so machen müssen . – Christopher Alexander

Das Dokumentieren eines Musters erfordert das Erklären, warum eine bestimmte Situation Probleme verursacht, und wie die Komponenten des Musters zueinander in Beziehung stehen, um die Lösung zu liefern. Christopher Alexander beschreibt gängige Designprobleme, die aus „widersprüchlichen Kräften“ entstehen – wie zum Beispiel der Konflikt zwischen einem sonnigen Raum und dem Wunsch, sich an Sommernachmittagen nicht zu überhitzen. Ein Muster würde dem Designer nicht sagen, wie viele Fenster man in den Raum stellen könnte; stattdessen würde es eine Reihe von Werten vorschlagen, um den Designer zu einer Entscheidung zu führen, die für seine spezielle Anwendung am besten ist. Alexander schlägt zum Beispiel vor, dass genügend Fenster enthalten sein sollten, um das Licht rund um den Raum zu lenken. Er hält dies für eine gute Lösung, weil er glaubt, dass es den Raum für seine Bewohner erhöht. Andere Autoren könnten zu anderen Schlussfolgerungen kommen, wenn sie einen höheren Wert auf Heizkosten oder Materialkosten legen. Diese Werte, die vom Autor des Musters verwendet werden, um zu bestimmen, welche Lösung „am besten“ ist, müssen ebenfalls innerhalb des Musters dokumentiert werden.

Musterdokumentation sollte auch erklären, wann es anwendbar ist. Da zwei Häuser sehr unterschiedlich sein können, muss ein Designmuster für Häuser breit genug sein, um auf beide angewendet zu werden, aber nicht so vage, dass es dem Designer nicht hilft, Entscheidungen zu treffen. Der Bereich von Situationen, in denen ein Muster verwendet werden kann, wird als sein Kontext bezeichnet. Einige Beispiele könnten „alle Häuser“, „alle zweistöckigen Häuser“ oder „alle Orte, an denen Menschen Zeit verbringen“ sein.

In Christopher Alexanders Arbeit stehen beispielsweise Bushaltestellen und Warteräume in einem Operationszentrum im Kontext des Musters „A PLACE TO WAIT“.

Designmusterklassen
Das Design Patterns-Buch der Quadruple Gang (ISBN 0-201-63361-2) unterscheidet drei Muster von Designmustern, aber es gibt kein scharfes Kriterium, das sie voneinander trennt.

Erstellungsmuster
Erstellungsmuster bieten Vorschläge zum Erstellen von Softwareobjekten (oder Klasseninstanzen). Die Idee ist, dass eine gute Software unabhängig davon entworfen werden muss, wie die Objekte, die sie enthält, erstellt werden. Mit anderen Worten, wo und wie Objekte erstellt werden, beeinflusst nicht den Betrieb der Software, zu der sie gehören; Neue Funktionen sollten nicht hinzugefügt werden und Probleme mit den Änderungen.

Mit der Entwicklung von Softwaresystemen gewinnt die Objektkomposition mehr an Bedeutung als die Klassenvererbung. Der Grund dafür ist, dass Designs, die auf der Definition einfacher Grundverhaltensmuster für Softwaresysteme basieren, flexibler sind als Designs, die auf festem Verhalten basieren. Mit anderen Worten, das Hinzufügen von Verhalten zu Objekten als eine Kombination ermöglicht, dass späteres Verhalten entsprechend der Entwicklung der Software modifiziert wird. In diesem Fall ermöglicht ein Entwurf, der auf den grundlegenden Verhaltensanforderungen für die entwickelte Software basiert, die Verwendung unterschiedlicher oder komplexerer Verhaltensweisen, ohne die Objektschnittstellen zu modifizieren.

Es ist jedoch schwieriger, Objekte zu erfassen, die grundlegendes Verhalten durch objektive Kombinationen bereitstellen, oder Objekte aus abgeleiteten Klassen zu erstellen, indem Verhalten erbt oder geändert wird. Erstellungsmuster umfassen Softwaremuster, die verwendet werden können, um diese Schwierigkeiten zu überwinden.

Erstellungsmuster speichern im Softwaresystem, welche konkreten Klassen in der Objektinstanz verwendet werden und wie diese Instanzen erstellt und zusammengestellt werden.

Fabrikmethode
Indem er erbt, wie das Objekt es unter der einzigen Schnittstelle erzeugt, die für die Objekterzeugung verwendet wird, belässt es die Funktionen zur Objekterstellung in der Schnittstelle, indem es den Unterklassen überlassen wird.

Beispiel (Prototypmuster)
Wenn Objekte aus komplexen und / oder teuren Klassen erstellt werden, ermöglichen sie es, neue Objekte zu erstellen, indem sie aus ihren vorhandenen Objekten Stichproben erstellen, anstatt sie von Anfang an zu erstellen. Auf diese Weise können leicht neue Objekte erstellt und Ressourcen nicht unnötig belegt werden.

Abstraktes Fabrikmuster
Eine einzige Schnittstelle ermöglicht es, eine Objektfamilie auf verschiedenen Plattformen zu erstellen. Diese nummerierte Softwareanwendung kann ohne Verhaltensänderungen auf verschiedene Plattformen verschoben werden. Das abstrakte Fabrikmuster hält fest, welche konkreten Klassen unter einer einzigen Schnittstelle verwendet werden.

Erbauermuster
Es ermöglicht die Erstellung einer komplexen Gruppe von Objekten in Teilen nach Bedarf über eine einzige Schnittstelle. Da der Benutzer die Objektgruppe verwendet, ist die Objektgruppe in die gewünschte Richtung strukturiert. Unbenutzte Teile werden unnötig erstellt und verbrauchen keine Ressourcen.

Das Singleton-Muster
In einer Klasse wird nur ein Objekt erstellt, das erstellt werden soll. Auf dieses Objekt kann von überall in der Anwendung zugegriffen werden. Das Objekt darf erst erstellt werden, wenn es zum ersten Mal verwendet wird.

Strukturelle Muster
Es bietet Vorschläge, die es ermöglichen, breitere Softwarestrukturen zu erstellen, indem strukturelle Musterklassen und -objekte kombiniert werden. Klassenstrukturmuster und Objektstrukturmuster sind zweigeteilt.

Klassenstrukturmuster erweitern Konstrukte durch Verwendung von Klassenvererbung oder Compoundierungsanwendungen. Objektstrukturmuster zeigen, wie Objekte kombiniert werden, um neue Funktionen zu erhalten.

Zusammengesetztes Muster
Es ermöglicht, dass Objekte in einer Stück-Ganzes-Beziehung mit einer Baumstruktur kombiniert werden, und diese Verbindung kann von einer einzelnen Schnittstelle aus erreicht werden. Die Verbundstruktur kann sich im Laufe der Zeit durch Hinzufügen und Entfernen neuer Objekte ausdehnen und zusammenziehen.

Fassade (Fassadenmuster)
Es ermöglicht die Verwendung einer komplexen Struktur in einer einzigen Schnittstelle.

Dekorationsmuster
Es ermöglicht einem Objekt, neue Verantwortlichkeiten hinzuzufügen, ohne das Objekt zu ändern. Es ermöglicht, die Funktionalität von Objekten ohne Unterklassifizierung zu verbessern.

Brückenmuster
Es erlaubt sowohl die Schnittstelle als auch die konkrete Implementierung voneinander zu trennen. Das Ändern der Schnittstelle hat keine Auswirkungen auf die Schnittstelle. Beide können unabhängig voneinander entwickelt werden.

Fliegengewicht-Muster
Anstatt eine große Anzahl ähnlicher Objekte zu erstellen, können Sie eine überfüllte Objektstruktur erstellen, indem Sie visuelle Objekte aus einem Beispielobjekt erstellen. Statusvariablen von visuellen Objekten werden vom Benutzer gespeichert und nicht vom Objekt selbst.

Adaptermuster
Es wird verwendet, um die Schnittstellen von Objekten oder Klassen aus verschiedenen Quellen anzupassen.

Vertretungsmuster
Es ist möglich, die Schnittstelle zu imitieren, um komplizierte, teure und schwierig zu bauende Objekte zu verwenden. Es ermöglicht die Ausrichtung des physischen Objekts des zu verwendenden Objekts vor dem Benutzer.

Verhaltensmuster
Verhaltensmuster liefern Vorschläge, wie funktionale Verantwortlichkeiten zwischen Objekten zugeordnet werden können und wie die von der Software benötigten Lösungsmethoden objektiv genutzt werden können. Verhaltensmuster bieten auch Objekte und Klassenmuster sowie Muster, die sich auf die Kommunikation zwischen Objekten beziehen. Verhaltensmuster erlauben dem Designer, sich auf Kommunikations- und Kommunikationsmethoden zwischen Objekten zu konzentrieren.

Verhaltensmuster werden ebenso wie strukturelle Muster in zwei geteilt: Klassenverhaltensmuster und Objektverhaltensmuster.

Klassenverhaltensmuster ermöglichen das Verteilen von Verhalten auf Klassen unter Verwendung von Vererbung. Objektverhaltensmuster ermöglichen es, Verhalten durch eine Objektgruppe zu erreichen, die durch Objektkomposition nicht einfach durch ein einzelnes Objekt erreicht werden kann.

Mediator Muster
Objekte, die miteinander verbunden sind, können von einem einzigen Punkt aus (dh vom Finder) unter demselben Dach geführt werden. Objekte, die mit dem Suchfinder verbunden sind, kommunizieren Statusänderungen an den Suchfinder. Der Finder findet Anfragen von Objekten, die von der Anwendung für die Bearbeitung und Bestellung benötigt werden. Benutzerobjekte der obersten Ebene werden nur mit dem Finder verbunden.

Zustandsmuster
Es erlaubt einem Objekt, sein Verhalten entsprechend seiner Situation zu ändern. Aus der Sicht des Benutzers ergibt sich der Eindruck, dass Sie die Objektklasse modifizieren. Dadurch können neue Verhaltensweisen in der von der Anwendung benötigten Richtung hinzugefügt und entfernt werden. Benutzerobjekte sind von solchen Änderungen nicht betroffen.

Beobachtermuster
Es ermöglicht einer Gruppe von Objekten, Beobachtern, automatisch über Änderungen in einem beobachteten Objekt informiert zu werden. Das zu beobachtende Objekt funktioniert weiterhin unabhängig davon, wer verfolgt wird. Es ist möglich, dass neue Beobachter rechtzeitig teilnehmen oder gehen. Auf diese Weise kann die Anwendung das Verhalten im Laufe der Zeit ändern.

Vorlagenmethodenmuster
Es ermöglicht die Verwendung einer Prozedur als Lösungsvorlage. Es ermöglicht, dass einige Verarbeitungsschritte auf dem Chip von Unterklassen verarbeitet werden. Daher können einige Zwischenschritte geändert werden, ohne das Hauptmuster zu ändern. Benutzer sind sich dieser Änderungen nicht bewusst.

Befehlsmuster
Es ermöglicht, dass (objektive) Benutzeranforderungen in Objekte transformiert und verarbeitet werden können. Auf diese Weise können die Wünsche verschiedener Benutzer in Zieldatensätze umgewandelt und in Warteschlangen oder Datensätzen gespeichert werden. Es ist auch möglich, die Transaktionen in diesem Tresor umzukehren.

Verantwortung Kette (Kette der Verantwortung Muster)
Ein Benutzer (Ziel) ermöglicht die Auswertung der Anfrage, indem mehrere Objekte erfüllt werden. Der Benutzer sendet die Anfrage über eine einzige Schnittstelle. Anfragen werden wiederum von den Objekten bearbeitet, die mit der Anfrage verbunden sind. Die Anforderung wird von einem Objekt zu einem anderen in der Kette übertragen, bis sie begrüßt wird. Es ist möglich, neue Objekte in der Kette im Laufe der Zeit hinzuzufügen oder zu entfernen. Der Benutzer ist von der Schnittstelle von solchen Änderungen nicht betroffen.

Dolmetschermuster
Die Pseudo-Sprache, die definiert ist, um die Anforderungen komplexer Anwendungen zu erfüllen, ist eine Interpreter-Vorlage. Pseudo-Sprache erlaubt die einfache Anwendung von grammatikalischen Regeln, indem man sie als Klassen definiert. Da Grammatikregeln als Klassen definiert sind, können sie leicht modifiziert und verbessert werden.

Yadigâr (Erinnerungsmuster)
Yadigâr wird verwendet, um die Zustände von Objekten, die in der Anwendungssoftware eine wichtige Rolle spielen, zu verbergen und sie bei Bedarf zu erinnern oder zu erinnern.

Iteratormuster
Es stellt sicher, dass Objekte, die sich unter einem Massenobjekt (Aggragate-Objekt) befinden, nacheinander erreicht werden können, unabhängig davon, wie Objekte dargestellt oder realisiert werden. Auf so dargestellte Objekte kann über eine einzige Schnittstelle zugegriffen werden.

Strategie (Strategie)
Unter derselben Schnittstelle verbergen viele Lösungsmethoden, die das gleiche Problem lösen können, die Klasse, was es ermöglicht, Anforderungen von Benutzerobjekten zu erfüllen, ohne zu wissen, welche Methode verwendet wird. Der Benutzer sieht sich mit verschiedenen Verhaltensweisen konfrontiert, wenn er behauptet, mit demselben Objekt zu arbeiten.

Besuchermuster
Es ermöglicht das Hinzufügen neuer Operationen zu einer zusammengesetzten Struktur. Der Besucher besucht einzelne Objekte innerhalb der Verbundstruktur, sammelt die notwendigen Informationen, verarbeitet sie und präsentiert sie dem Benutzer.