HyperCube IT Solutions | Entwurfsmuster Design Patterns - Verhaltensmuster
Thema dieses Blog-Artikels sind die Verhaltensmuster (Behavioral Patterns) innerhalb der Entwurfsmuster (Design Patterns).
entwurfsmuster verhaltensmuster besucher strategie
8884
post-template-default,single,single-post,postid-8884,single-format-standard,cookies-not-set,locale-de-de,ajax_fade,page_not_loaded,,qode-child-theme-ver-1.0.0,qode-theme-ver-3.8,wpb-js-composer js-comp-ver-5.4.5,vc_responsive
 

Blog

Entwurfsmuster (Design Patterns): Verhaltensmuster in Java

  |   App-Entwicklung, IT Consulting, Softwareentwicklung, Webentwicklung

Thema: Entwurfsmuster (Design Patterns): Verhaltensmuster in Java
Autor: Christian Paulus (HyperCube IT Solutions)
E-Mail: c.paulus@hypercube.biz
Web: www.hypercube.biz

Thema dieses Blog-Artikels sind die Verhaltensmuster (Behavioral Patterns), die als einer von drei Grundtypen innerhalb der Entwurfsmuster (Design Patterns) angesiedelt sind.

Entwurfsmuster (Design Patterns) sind in der Softwarearchitektur und -entwicklung allgemeine, wiederverwendbare und bewährte Lösungsmuster für wiederkehrende Entwurfsprobleme. Sie bilden somit eine wiederverwendbare Vorlage zur Problemlösung, welche in einem bestimmten Kontext eingesetzt werden kann. Es existieren drei unterschiedliche Grundtypen von Entwurfsmustern (Design Patterns): Erzeugungsmuster (Creational Patterns), Strukturmuster (Structural Patterns) und Verhaltensmuster (Behavioral Patterns).

Verhaltensmuster modellieren komplexes Verhalten der Software und erhöhen dadurch ihre Flexibilität hinsichtlich ihres Verhaltens.
Beispiele für Verhaltensmuster sind: Beobachter, Besucher, Iterator, Schablonenmethode und Strategie.

Nachfolgend wird für zwei Verhaltensmuster (Besucher und Strategie) jeweils ein entsprechendes UML Diagramm dargestellt und erläutert sowie eine beispielhafte Implementierung aufgezeigt. Die Implementierung erfolgt in der objektorientierten Programmiersprache Java.

Besucher:

Das Entwurfsmuster „Besucher“ (visitor pattern) kapselt eine auf den Elementen einer Objektstruktur auszuführende Operation als ein Objekt. Es ermöglicht eine neue Operation zu definieren, ohne die Klassen der von ihr bearbeiteten Elemente zu verändern.

Es wird eingesetzt, wenn

  • viele unterschiedliche, nicht verwandte Operationen auf einer Objektstruktur realisiert werden sollen,
  • sich die Klassen der Objektstruktur nicht verändern,
  • häufig neue Operationen auf der Objektstruktur integriert werden müssen oder
  • ein Algorithmus über die Klassen einer Objektstruktur verteilt arbeitet, aber zentral verwaltet werden soll.

Das UML Diagramm für das Entwurfsmuster „Besucher“ stellt sich wie folgt dar:

UML Diagramm für das Entwurfsmuster
UML Diagramm für das Entwurfsmuster "Besucher"

Die Akteure des Entwurfsmusters „Besucher“ sind wie folgt:

Visitor (Besucher):
Deklariert für jede Klasse konkreter Elemente eine Besuchsfunktion.

ConcreteVisitor (KonkreterBesucher):
Implementiert Besuchsfunktionen; jede Besuchsfunktion ist ein Teil des Algorithmus, der auf die gesamte Objektstruktur angewendet wird.

Element (Element):
Deklariert eine Schnittstelle für den Empfang eines Besuchers

ConcreteElement (KonkretesElement):
Implementiert den Empfang eines Besuchers

ObjectStructure (Objektstruktur):
Kollektion oder zusammengesetzte Objektstruktur.

Client (Klient):
Referenziert auf die Schnittstelle des Besuchers und durchläuft die Elemente der Objektstruktur.

Eine beispielhafte Java-Implementierung für das Entwurfsmuster „Besucher“ sieht wie folgt aus:

Für die Übersichtlichkeit dieses Beispiels wurden alle Java-Klassen in einer Java-Datei aufgeführt, anstatt wie üblich jede Java-Klasse in einer eigenen Java-Datei aufzuführen.

Die Ausführung der Java-Datei VisitorPattern.java in der Eclipse IDE liefert das folgende Ergebnis:

Ausführung von
Ausführung von "VisitorPattern.java" in Eclipse

Strategie

Das Entwurfsmuster „Strategie“ (strategy pattern) definiert eine Familie von Algorithmen, kapselt jeden einzelnen und macht sie austauschbar. Es ermöglicht den Algorithmus unabhängig von ihn nutzenden Klienten zu variieren.

Es wird eingesetzt, wenn

  • viele verwandte Klassen sich nur in ihrem Verhalten unterscheiden,
  • unterschiedliche (austauschbare) Varianten eines Algorithmus benötigt werden,
  • Daten innerhalb eines Algorithmus vor Klienten verborgen werden sollen oder
  • verschiedene Verhaltensweisen innerhalb einer Klasse fest integriert sind, aber die verwendeten Algorithmen wiederverwendet werden sollen bzw. die Klasse flexibler gestaltet werden soll.

Das UML Diagramm für das Entwurfsmuster „Strategie“ stellt sich wie folgt dar:

UML Diagramm für das Entwurfsmuster
UML Diagramm für das Entwurfsmuster "Strategie"

Die Akteure des Entwurfsmusters „Strategie“ sind wie folgt:

Strategy (Strategie):
Definiert eine gemeinsame Schnittstelle für alle unterstützten Algorithmen. Der „Kontext“ (Context) verwendet diese Schnittstelle um den Algorithmus aufzurufen, welcher von einer „konkreten Strategie“ (ConcreteStrategy) definiert wurde.

ConcreteStrategy (KonkreteStrategie):
Implementiert den Algorithmus unter Verwendung der Strategie-Schnittstelle.

Context (Kontext):
Hält eine Variable der Schnittstelle Strategie, die mit einer Referenz auf das gewünschte Objekt der „konkreten Strategie“ (ConcreteStrategy) belegt ist. Auf diese Weise wird der konkrete Algorithmus über die Schnittstelle eingebunden und kann bei Bedarf selbst zur Laufzeit noch dynamisch gegen eine andere Implementierung ausgetauscht werden.

Client (Klient):
Referenziert auf die Schnittstelle der Strategie und verwendet den Kontext.

Eine beispielhafte Java-Implementierung für das Entwurfsmuster „Strategie“ sieht wie folgt aus:

Für die Übersichtlichkeit dieses Beispiels wurden alle Java-Klassen in einer Java-Datei aufgeführt, anstatt wie üblich jede Java-Klasse in einer eigenen Java-Datei aufzuführen.

Die Ausführung der Java-Datei StrategyPattern.java in der Eclipse IDE liefert das folgende Ergebnis:

Ausführung von
Ausführung von "StrategyPattern.java" in Eclipse

Quellenangaben:

  1. Gamma, Erich et al. – Design Patterns: Elements of Reusable Object-Oriented Software; Addison-Wesley, 2009
  2. Gamma, Erich et al. – Entwurfsmuster: Elemente wiederverwendbarer objektorientierter Software; Addison-Wesley, 2011
  3. Gamma, Erich et al. – Design Patterns: Entwurfsmuster als Elemente wiederverwendbarer objektorientierter Software; mitp, 2015
  4. Wikipedia – Visitor pattern: https://en.wikipedia.org/wiki/Visitor_pattern
  5. Wikipedia – Besucher (Entwurfsmuster): https://de.wikipedia.org/wiki/Besucher_(Entwurfsmuster)
  6. Wikipedia – Strategy pattern: https://en.wikipedia.org/wiki/Strategy_pattern
  7. Wikipedia – Strategie (Entwurfsmuster): https://de.wikipedia.org/wiki/Strategie_(Entwurfsmuster)