HyperCube IT Solutions | Entwurfsmuster Design Patterns - Erzeugungsmuster
Thema dieses Blog-Artikels sind die Erzeugungsmuster (Creational Patterns) innerhalb der Entwurfsmuster (Design Patterns).
entwurfsmuster erzeugungsmuster abstrakte fabrik erbauer
8737
post-template-default,single,single-post,postid-8737,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): Erzeugungsmuster in Java

  |   App-Entwicklung, IT Consulting, Softwareentwicklung, Webentwicklung

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

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

Erzeugungsmuster werden für die Objekterzeugung verwendet und entkoppeln die Objektkonstruktion von der Objektrepräsentation.
Beispiele für Erzeugungsmuster sind: Abstrakte Fabrik, Fabrikmethode, Erbauer, Prototyp und Singleton.

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

Abstrakte Fabrik:

Das Entwurfsmuster „Abstrakte Fabrik“ (abstract factory pattern) definiert eine Schnittstelle zur Erzeugung einer Familie von Objekten, wobei die konkreten Klassen der zu instanziierenden Objekte nicht näher festgelegt werden.

Es wird eingesetzt, wenn

  • ein System unabhängig von der Art der Erzeugung seiner Produkte arbeiten soll,
  • ein System mit einer oder mehreren Produktfamilien konfiguriert werden soll,
  • eine Gruppe von Produkten erzeugt und gemeinsam genutzt werden soll oder
  • wenn in einer Klassenbibliothek die Schnittstellen von Produkten ohne deren Implementierung bereitgestellt werden sollen.

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

UML Diagramm für das Entwurfsmuster
UML Diagramm für das Entwurfsmuster "Abstrakte Fabrik"

Die Akteure des Entwurfsmusters „Abstrakte Fabrik“ sind wie folgt:

AbstractFactory (AbstrakteFabrik):
Definiert eine Schnittstelle zur Erzeugung abstrakter Produkte einer Produktfamilie.

ConcreteFactory (KonkreteFabrik):
Erzeugt konkrete Produkte einer Produktfamilie durch Implementierung der Schnittstelle.

AbstractProduct (AbstraktesProdukt):
Definiert eine Schnittstelle für eine Produktart.

ConcreteProduct (KonkretesProdukt):
Definiert ein konkretes Produkt einer Produktart durch Implementierung der Schnittstelle, wird durch die korrespondierende konkrete Fabrik erzeugt.

Client (Klient):
Verwendet die Schnittstellen der abstrakten Fabrik und der abstrakten Produkte.

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

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

Erbauer

Das Entwurfsmuster „Erbauer“ (builder pattern) trennt die Konstruktion komplexer Objekte von deren Repräsentationen, wodurch dieselben Konstruktionsprozesse wiederverwendet werden können.

Es wird eingesetzt, wenn

  • zu einem komplexen Objekt unterschiedliche Repräsentationen existieren sollen,
  • die Konstruktion eines komplexen Objekts unabhängig von der Erzeugung der Bestandteile sein soll oder
  • der Konstruktionsablauf einen internen Zustand erfordert, der vor einem Klienten verborgen werden soll.

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

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

Die Akteure des Entwurfsmusters „Erbauer“ sind wie folgt:

Director (Direktor):
Konstruiert ein komplexes Objekt unter Verwendung der Schnittstelle des Erbauers.
Arbeitet eng mit dem Erbauer zusammen: Er weiß, welche Baureihenfolge der Erbauer verträgt oder benötigt.
Entkoppelt den Konstruktionsablauf vom Klienten.

Builder (Erbauer):
Spezifiziert eine abstrakte Schnittstelle zur Erzeugung der Teile eines komplexen Objektes.

ConcreteBuilder (KonkreterErbauer):
Erzeugt die Teile des komplexen Objekts durch Implementierung der Schnittstelle.
Definiert und verwaltet die von ihm erzeugte Repräsentation des Produkts.

Product (Produkt):
Das Produkt repräsentiert das zu konstruierende komplexe Objekt.

Client (Klient):
Verwendet den Direktor und konkrete Erbauer zur Konstruktion komplexer Objekte (Produkte).

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

Ausführung von
Ausführung von "BuilderPattern.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 – Abstract factory pattern: https://en.wikipedia.org/wiki/Abstract_factory_pattern
  5. Wikipedia – Abstrake Fabrik: https://de.wikipedia.org/wiki/Abstrakte_Fabrik
  6. Wikipedia – Builder pattern: https://en.wikipedia.org/wiki/Builder_pattern
  7. Wikipedia – Erbauer (Entwurfsmuster): https://de.wikipedia.org/wiki/Erbauer_(Entwurfsmuster)