# 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 als auch dynamischen und funktionalen Programmiersprachen umgesetzt, andere üblicherweise nur mit letzteren.

## 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)

    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)

    Ist eine Möglichkeit, einen Algorithmus von einem Objekt zu trennen.

### Consequences

    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

    Implementiert eine spezielle Programmiersprache, um schnell eine spezifische Menge von Problemen zu lösen.

### Iterator

    Iteratoren werden zum Zugriff auf Elemente eines aggregierten Objekt verwendet.

### Kommando (englisch command pattern)

    Befehlsobjekte kapseln eine Handlung mit ihren Parametern.

### MapReduce

    Eine Reduktion von linearen Strukturen. MapReduce ist ein Data Building Muster.

### Memento

    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

    Die Kommunikation wird über mehrere Schichten durchgeführt, die eine Datenkapselungshierarchie bilden.

### Reduce/Combine

    Eine Reduktion von baumartigen Strukturen. Reduce/Combine ist ein Data Building Muster.

### Rekursive Erweiterung

    Rekursive Erweiterung ist ein Data Building Muster.

### Reservierung (englisch Reservation)

    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)

    Beschreibt das Gerüst eines Programms

### Schwache Referenz (englisch weak reference pattern)

    Entkoppelt ähnlich dem Beobachter Entwurfsmuster einen Beobachter von einem zu beobachtenden (englisch observable).

### Pipeline

    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)

    Verwandelt eine rekursive Funktion in eine Iterative, die den Stapel verwendet.

### State/Event

    Stellt einen beliebigen vorherigen Status durch Reduzierung über gespeicherte Ereignisse wieder her. State/Event ist ein Zustandsmuster

### Strategie (englisch strategy pattern)

    Dient zur Auswahl von unterschiedlichen, meist komplexen Algorithmen zur Laufzeit.

### Token

    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)

    Stellt eine einheitliche Schnittstelle für eine Schnittstellenmenge eines Teilsystems zur Verfügung.

### Wrapper

    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)

    Ist ein sauberer Weg für ein Objekt, teilweise seinen Typ zur Laufzeit zu verändern.

### Zuständigkeitskette (englisch chain of responsibility pattern)

    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.