Das Composite Design Pattern: Strukturierte Objektverwaltung leicht gemacht

Das Composite Design Pattern gehört zur Gruppe der Strukturmuster und eignet sich besonders, wenn eine Teil-Ganzes-Hierarchie abzubilden ist. Es kommt dann zum Einsatz, wenn eine Gruppe von Objekten als ein einziges Objekt behandelt sein soll.

Anwendung des Composite Patterns

Das Composite Design Pattern ist zu nutzen, um Strukturen zu schaffen, bei denen alle Elemente in der Struktur auf gleiche Weise zu behandeln sind. Ein anschauliches Beispiel ist eine Grafik, die aus verschiedenen Objekten wie Kreisen, Linien oder Dreiecken besteht. Färbt man die Grafik beispielsweise rot ein, so wird diese Farbe auf alle Objekte angewendet. In diesem Fall besteht die Grafik aus unterschiedlichen Teilen, die alle die gleiche Funktionalität aufweisen.

Das Composite Pattern umfasst folgende Bestandteile:

  1. Basis-Komponente: Die Basis-Komponente definiert eine Schnittstelle, die alle Objekte in der Komposition implementieren. Das Client-Programm nutzt die Basis-Komponente, um mit den Objekten zu interagieren. Diese Komponente kann eine Schnittstelle oder eine abstrakte Klasse mit gemeinsamen Methoden sein.
  2. Blatt: Die Blatt-Objekte definieren das Verhalten der Elemente innerhalb der Komposition. Sie sind die Bausteine der Komposition und implementieren die Basis-Komponente. Ein Blatt hat keine Referenzen zu anderen Komponenten.
  3. Kompositum: Diese Komponente enthält eine Gruppe von Blatt-Objekten und implementiert die Operationen der Basis-Komponente. Es stellt sicher, dass Operationen an allen enthaltenen Blättern ausgeführt sind.

Implementierung des Composite Design Patterns

Hier sehen Sie ein Beispiel, wie das Composite Design Pattern auf eine Grafik-Anwendung angewendet ist:

1. Basis-Komponente:

Die Basis-Komponente definiert die Methoden, die von Blättern und Kompositum implementiert sind. Eine Klasse Shape könnte beispielsweise eine Methode draw(String fillColor) enthalten, um die Form mit einer bestimmten Farbe zu zeichnen.

 
package com.example.design.composite;

public interface Shape {
    public void draw(String fillColor);
}

2. Blatt-Objekte:

Blatt-Objekte wie Dreiecke und Kreise implementieren die Basis-Komponente. Diese Klassen definieren, wie die jeweilige Form gezeichnet wird.


 
package com.example.design.composite;

public class Triangle implements Shape {
    @Override
    public void draw(String fillColor) {
        System.out.println("Zeichne Dreieck mit der Farbe " + fillColor);
    }
}


 
package com.example.design.composite;

public class Circle implements Shape {
    @Override
    public void draw(String fillColor) {
        System.out.println("Zeichne Kreis mit der Farbe " + fillColor);
    }
}

3. Kompositum:

Ein Kompositum-Objekt enthält eine Sammlung von Blatt-Objekten. Es bietet Methoden zum Hinzufügen, Entfernen und Leeren der Gruppe.

 
package com.example.design.composite;

import java.util.ArrayList;
import java.util.List;

public class Drawing implements Shape {

    private List shapes = new ArrayList<>();

    @Override
    public void draw(String fillColor) {
        for(Shape shape : shapes) {
            shape.draw(fillColor);
        }
    }

    public void add(Shape shape) {
        shapes.add(shape);
    }

    public void remove(Shape shape) {
        shapes.remove(shape);
    }

    public void clear() {
        System.out.println("Alle Formen aus der Zeichnung entfernen.");
        shapes.clear();
    }
}

Client-Programm

Das folgende Client-Programm demonstriert, wie das Composite Design Pattern verwendet werden kann:

 
package com.example.design.test;

import com.example.design.composite.Circle;
import com.example.design.composite.Drawing;
import com.example.design.composite.Shape;
import com.example.design.composite.Triangle;

public class TestCompositePattern {
    public static void main(String[] args) {
        Shape triangle1 = new Triangle();
        Shape triangle2 = new Triangle();
        Shape circle = new Circle();

        Drawing drawing = new Drawing();
        drawing.add(triangle1);
        drawing.add(triangle2);
        drawing.add(circle);

        drawing.draw("Rot");

        drawing.clear();

        drawing.add(triangle1);
        drawing.add(circle);
        drawing.draw("Grün");
    }
}

Die Ausgabe des Programms zeigt, wie das Composite Pattern in Aktion tritt:

 
Zeichne Dreieck mit der Farbe Rot
Zeichne Dreieck mit der Farbe Rot
Zeichne Kreis mit der Farbe Rot
Alle Formen aus der Zeichnung entfernen.
Zeichne Dreieck mit der Farbe Grün
Zeichne Kreis mit der Farbe Grün

Wichtige Punkte zum Composite Design Pattern

  • Das Composite Pattern sollte nur Verwendung finden, wenn eine Gruppe von Objekten als ein einziges Objekt zu behandeln ist.
  • Es eignet sich besonders für Strukturen, die einem Baum ähneln, bei denen ein Kompositum aus mehreren Blättern bestehen kann.

Durch den Einsatz dieses Entwurfsmusters ist die Flexibilität im Umgang mit komplexen Objektstrukturen erhöht und die Wartbarkeit von Code verbessert.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

Java-Array: So prüfst du Werte effizient

JavaScript
Wie prüft man, ob ein Java Array einen Wert enthält? Es gibt viele Möglichkeiten, um zu überprüfen, ob ein Java Array einen bestimmten Wert enthält. Einfache Iteration mit einer for-Schleife…