Verhaltensmuster (Software)
Die Verhaltensmuster (englisch behavioral design patterns) in der Softwareentwicklung sind Entwurfsmuster, die komplexes Verhalten der Software modellieren. Auf diese Weise wird die Flexibilität der Software hinsichtlich ihres Verhaltens erhöht.
Einige Verhaltensmuster werden üblicherweise sowohl mit objektorientierten[1] als auch dynamischen und funktionalen Programmiersprachen umgesetzt, andere üblicherweise nur mit letzteren.[2][3]
Vertreter
Die Verhaltensmuster können in verschiedene Gruppen unterteilt werden. Bei den funktionalen Verhaltensmuster werden beispielsweise Zustandsmuster, Data Building Muster, und Flusssteuerungsmuster unterschieden.
- Accumulator
- Muster für Funktionen, die eine große Menge an Eingaben nimmt und kleine (skalare) Ausgaben produzieren, wie z. B. Lazy ausgewertete Sequenzen und Reduce-Funktionen. Accumulator ist ein Data Building Muster.
- Beobachter (englisch observer pattern)[1][3]
- Ist eine Art von Publish/Subscribe oder Ereignisbeobachter. Objekte oder Funktionen registrieren sich, um ein Ereignis zu erkennen, das von einem anderen Objekt erzeugt worden sein könnte. Die funktionale Variante entspricht im Wesentlichen der objektorientierten Version. In der funktionalen Programmierung ist das Beobachter Verhaltensmuster ein Flusssteuerungsmuster.
- Besucher (englisch visitor pattern)[1]
- Ist eine Möglichkeit, einen Algorithmus von einem Objekt zu trennen.
- Consequences[3]
- Jedes Ereignis kann mehrere Ereignisse auslösen. Erzeugte Ereignisse können Zustandsänderungen bewirken, Consequences ist somit ein Zustandsmuster
- Einmaliger Besucher (englisch single-serving visitor pattern)
- Objekt das einen einmaligen Nutzer eines Systems, der angelegt, einmal verwendet und anschließend gelöscht wird, implementiert.
- Hierarchischer Besucher
- Stellt eine Möglichkeit, in einer hierarchischen Datenstruktur wie z. B. einem Baum jeden Knoten zu erreichen.
- Interpreter[1]
- Implementiert eine spezielle Programmiersprache, um schnell eine spezifische Menge von Problemen zu lösen.
- Iterator[1]
- Iteratoren werden zum Zugriff auf Elemente eines aggregierten Objekt verwendet.
- Memento[1]
- Stellt die Fähigkeit zur Verfügung, ein Objekt zu einem Vorgängerzustand wiederherzustellen (rollback).
- Nullobjekt
- Wird als Vorgabewert für ein Objekt verwendet.
- Planmäßige Tätigkeit (englisch scheduled-task pattern)
- Eine Tätigkeit wird so geplant, dass sie in einem bestimmten Intervall oder (in Echtzeitsystemen) zu einer gewissen Uhrzeit stattfindet.
- Protokollstapel[4]
- Die Kommunikation wird über mehrere Schichten durchgeführt, die eine Datenkapselungshierarchie bilden.
- Reduce/Combine[3]
- Eine Reduktion von baumartigen Strukturen. Reduce/Combine ist ein Data Building Muster.
- Rekursive Erweiterung[3]
- Rekursive Erweiterung ist ein Data Building Muster.
- Reservierung (englisch Reservation)[5]
- Eine Ressource wird für eine gewisse Zeit reserviert. Ein Beispiel ist ein Warenkorb, bei dem ein in den Warenkorb eines Benutzers aufgenommenes Objekt für eine Zeit reserviert wird. Wird der Bezahlungsvorgang nicht innerhalb der vorgegebenen Zeit abgeschlossen, wird das Objekt wieder für andere Benutzer freigegeben.
- Schablonenmethode (englisch template method pattern)[1]
- Beschreibt das Gerüst eines Programms
- Schwache Referenz (englisch weak reference pattern)[6]
- Entkoppelt ähnlich dem Beobachter Entwurfsmuster einen Beobachter von einem zu beobachtenden (englisch observable).
- Pipeline[3]
- Ein Prozess mit einem einzelnen Ausführungspfad der in mehrere diskrete Schritte aufgeteilt wird, wobei jeder Schritt ein ähnlich geformtes Ergebnis liefert. Pipeline ist ein Flusssteuerungsmuster.
- Spezifikation (englisch specification pattern)
- Rekombinierbar Geschäftslogik in Boolischer Art und Weise.
- Stapelveräußerlichung (englisch externalize the stack)[7]
- Verwandelt eine rekursive Funktion in eine Iterative, die den Stapel verwendet.
- State/Event[3]
- Stellt einen beliebigen vorherigen Status durch Reduzierung über gespeicherte Ereignisse wieder her. State/Event ist ein Zustandsmuster
- Strategie (englisch strategy pattern)[1][3]
- Dient zur Auswahl von unterschiedlichen, meist komplexen Algorithmen zur Laufzeit.
- Token[3]
- Wird verwendet, um eine Operation abbrechen und rückgängig machen zu können, wobei die Operation selbst keine bestimmte (benannte) Identität besitzt. Token ist ein Flusssteuerungsmuster.
- Vermittler (englisch mediator pattern)[1]
- Stellt eine einheitliche Schnittstelle für eine Schnittstellenmenge eines Teilsystems zur Verfügung.
- Wrapper[3]
- Ein Prozess mit mehreren diskreten Schritten und einem einzelnen Hauptausführungspfad, jedoch einer möglichen Ausführungsverzweigung bei jedem Schritt. Dieses Muster darf nicht mit dem oft auch Wrapper genannten Adapter-Entwurfsmuster in objektorientierten Programmiersprachen verwechselt werden. Adapter ist ein Flusssteuerungsmuster.
- Zustand (englisch state pattern)[1]
- Ist ein sauberer Weg für ein Objekt, teilweise seinen Typ zur Laufzeit zu verändern.
- Zuständigkeitskette (englisch chain of responsibility pattern)[1]
- Befehlsobjekte werden durch logic-containing bearbeitende Objekte bearbeitet oder an andere Objekte übergeben.
- Sicherung (englisch circuit breaker)
- Bei einer Häufung von Zugriffsfehlern auf eine Ressource, etwa aufgrund von Überlastung, wird der Zugriff auf diese Ressource für eine Zeit unterbunden.
- Post/Redirect/Get
- Verhindert eine doppelte POST-Anfrage bei Webanwendungen.
Siehe auch
- Nebenläufigkeit
- Strukturmuster
- Erzeugungsmuster
Quellen
- ↑ a b c d e f g h i j k l Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides: Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software. Addison-Wesley, München 2004, ISBN 3-8273-2199-9 (gofpatterns.com [abgerufen am 30. November 2020] englisch: Design Patterns. Elements of Reusable Object-Oriented Software.).
- ↑ Peter Norvig: Design Patterns in Dynamic Languages. (PDF; PPT,) 17. März 1998, abgerufen am 6. April 2013 (englisch).
- ↑ a b c d e f g h i j k Stuart Sierra: Functional Design Patterns. InfoQ, 3. April 2013, abgerufen am 6. April 2013 (englisch).
- ↑ Protocol Stack. Abgerufen am 2. Juli 2013 (englisch).
- ↑ Arnon Rotem-Gal-Oz: Reservation. In: Cirrus Minor. Abgerufen am 1. Oktober 2014 (englisch).
- ↑ Ashod Nakashian: Weak Reference Pattern. Abgerufen am 2. Juli 2013 (englisch).
- ↑ Externalize The Stack. Abgerufen am 2. Juli 2013 (englisch).