22.12.2021 |

Composite

Kompositum-Pattern (Composite) ist ein strukturelles Entwurfsmuster, mit dem man in der Lage ist, Objekte in Baumstrukturen zusammenstellen und dann mit diesen Strukturen arbeiten zu können, als wären sie individuelle Objekte.

Der grundlegende Zweck des Composite Design Patterns ist, die bestmögliche Bewältigung wiederkehrender Entwurfsprobleme in der objektorientierten Entwicklung. Das gewünschte Endergebnis ist eine flexible Software, die sich durch leicht implementierbare, testbare, austauschbare und wiederverwendbare Objekte auszeichnet. Zu diesem Zweck beschreibt das Composite Pattern einen Weg, wie individuelle Objekte und zusammengesetzte Objekte gleich behandelt werden können. Auf diese Weise kann eine Objektstruktur geschaffen werden, die einfach zu verstehen ist und einen hocheffizienten Client-Zugriff ermöglicht. Außerdem wird die Fehleranfälligkeit des Codes minimiert.

image

Beispiel Implementierung

image

Kompositum Lösung (allgemein)

Component (Grafik)
  • deklariert Schnittstelle für Unterklassen
    • für die Verwaltung von Kind-Objekten
    • implementiert ggf. leere add- und remove-Methoden
    • implementiert ggf. Default-Verhalten für operation()
Leaf (Linie, Punkt ...)
  • implementiert Verhalten für atomare Objekte: operation()
    • keine Container-Funktionen
Composite (Gruppierung)
  • Container für Component-Objekte
    • implementiert die Container-Methoden
    • delegiert die operation-Methode: Iteration über alle Kind-Objekte
Pros Cons
Man kann bequemer mit komplexen Baumstrukturen arbeiten: Polymorphismus und Rekursion zum Vorteil nutzen. Es könnte schwierig sein, eine gemeinsame Schnittstelle für Klassen bereitzustellen, deren Funktionalität sich zu sehr unterscheidet. In bestimmten Szenarien müssten Sie die Komponentenschnittstelle übergeneralisieren, was das Verständnis erschwert.
Offen/Geschlossen-Prinzip. Man kann neue Elementtypen in die App einführen, ohne den bestehenden Code zu verändern, der jetzt mit dem Objektbaum arbeitet.
Dennis Hundertmark
Zur Übersicht

Mehr vom DevSquad...

Jörg Herbst

Server Side Tracking

Tim Tilch

Organisiere dein Scrum mit GitLab