HyperCube IT Solutions | Entwurfsmuster Design Patterns - Strukturmuster
Thema dieses Blog-Artikels sind die Strukturmuster (Structural Patterns) innerhalb der Entwurfsmuster (Design Patterns).
entwurfsmuster strukturmuster dekorierer brücke
8881
post-template-default,single,single-post,postid-8881,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): Strukturmuster in Java

  |   App-Entwicklung, IT Consulting, Softwareentwicklung, Webentwicklung

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

Thema dieses Blog-Artikels sind die Strukturmuster (Structural 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).

Strukturmuster erleichtern durch die Herstellung von Beziehungen zwischen Klassen den Entwurf der Software.
Beispiele für Strukturmuster sind: Kompositum, Dekorierer, Brücke, Adapter, Proxy und Fliegengewicht.

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

Dekorierer:

Das Entwurfsmuster „Dekorierer“ (decorator pattern) ist eine flexible Alternative zur Unterklassenbildung, um eine Klasse um zusätzliche Funktionalitäten zu erweitern.

Es wird eingesetzt, wenn

  • einzelnen Objekten zusätzliche Funktionalität dynamisch und transparent hinzugefügt werden soll, ohne andere Objekte mit einzubeziehen,
  • Funktionalität hinzugefügt werden soll, die auch wieder entfernt werden kann,
  • die Erweiterung mittels Unterklassenbildung nicht praktisch durchführbar ist.

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

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

Die Akteure des Entwurfsmusters „Dekorierer“ sind wie folgt:

Component (Komponente):
Definiert eine Schnittstelle für Komponenten und Dekorierer.

ConcreteComponent (KonkreteKomponente):
Definiert ein Objekt, das um zusätzliche Funktionalitäten erweitert werden kann.

Decorator (Dekorierer):
Verwaltet eine Referenz auf ein Komponentenobjekt und definiert eine Schnittstelle, die der Schnittstelle von Komponente entspricht.

ConcreteDecorator (KonkreterDekorierer):
Fügt der Komponente Funktionalität hinzu.

Client (Klient):
Referenziert auf die Schnittstelle der Komponente.

Eine beispielhafte Java-Implementierung für das Entwurfsmuster „Dekorierer“ 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 DecoratorPattern.java in der Eclipse IDE liefert das folgende Ergebnis:

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

Brücke

Das Entwurfsmuster „Brücke“ (bridge pattern) dient zur Trennung der Implementierung von ihrer Abstraktion (Schnittstelle), wodurch beide unabhängig voneinander verändert werden können.

Es wird eingesetzt, wenn

  • sowohl Abstraktion als auch Implementierung erweiterbar sein sollen und eine dauerhafte Verbindung zwischen Abstraktion und Implementierung verhindert werden soll,
  • Änderungen der Implementierung ohne Auswirkungen für den Klienten sein sollen,
  • die Implementierung vor dem Klienten verborgen bleiben soll, oder
  • die Implementierung von verschiedenen Klassen gleichzeitig genutzt werden soll.

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

UML Diagramm für das Entwurfsmuster
UML Diagramm für das Entwurfsmuster "Brücke"

Die Akteure des Entwurfsmusters „Brücke“ sind wie folgt:

Abstraction (Abstraktion):
Definiert die Schnittstelle der Abstraktion. Verwaltet eine Referenz auf ein Objekt des Typs „Implementor“.

RefinedAbstraktion (SpezAbstraktion):
Erweitert die durch Abstraktion definierte Schnittstelle.

Implementor (Implementierer):
Definiert die Schnittstelle für die Implementierungsklassen. Diese muss nicht notwendigerweise exakt mit der „Abstraction“-Schnittstelle übereinstimmen.

ConcreteImplementor (KonkreterImplementierer):
Implementiert die Schnittstelle „Implementor“ und definiert ihre konkrete Implementierung.

Client (Klient):
Referenziert auf die Schnittstelle der Abstraktion.

Eine beispielhafte Java-Implementierung für das Entwurfsmuster „Brücke“ 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 BridgePattern.java in der Eclipse IDE liefert das folgende Ergebnis:

Ausführung von
Ausführung von "BridgePattern.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 – Decorator pattern: https://en.wikipedia.org/wiki/Decorator_pattern
  5. Wikipedia – Decorator: https://de.wikipedia.org/wiki/Decorator
  6. Wikipedia – Bridge pattern: https://en.wikipedia.org/wiki/Bridge_pattern
  7. Wikipedia – Brücke (Entwurfsmuster): https://de.wikipedia.org/wiki/Brücke_(Entwurfsmuster)