Zusammengesetztes Muster ist eines der strukturellen Entwurfsmuster. Das zusammengesetzte Entwurfsmuster wird verwendet, wenn wir eine Teil-Ganzes-Hierarchie darstellen müssen.
Zusammengesetztes Entwurfsmuster
Wenn wir eine Struktur erstellen müssen, so dass die Objekte in der Struktur auf die gleiche Weise behandelt werden müssen, können wir das zusammengesetzte Entwurfsmuster anwenden. Lassen Sie uns dies anhand eines realen Beispiels verstehen – Ein Diagramm ist eine Struktur, die aus Objekten wie Kreisen, Linien, Dreiecken usw. besteht. Wenn wir die Zeichnung mit Farbe füllen (sagen wir Rot), wird dieselbe Farbe auch auf die Objekte in der Zeichnung angewendet. Hier besteht die Zeichnung aus verschiedenen Teilen, und sie alle haben dieselben Operationen. Das zusammengesetzte Muster besteht aus folgenden Objekten.
- Basis-Komponente – Die Basis-Komponente ist die Schnittstelle für alle Objekte in der Zusammensetzung. Das Client-Programm verwendet die Basis-Komponente, um mit den Objekten in der Zusammensetzung zu arbeiten. Es kann eine Schnittstelle oder eine abstrakte Klasse mit einigen Methoden sein, die allen Objekten gemeinsam sind.
- Blatt – Definiert das Verhalten der Elemente in der Komposition. Es ist der Baustein für die Komposition und implementiert das Grundkomponente. Es hat keine Verweise auf andere Komponenten.
- Zusammengesetzt – Besteht aus Blattelementen und implementiert die Operationen in der Grundkomponente.
Hier wende ich das Zusammensetzungsdesignmuster für das Zeichnungsszenario an.
Zusammensetzungsdesignmuster-Grundkomponente
Die Grundkomponente des Zusammensetzungsdesignmusters definiert die gemeinsamen Methoden für Blätter und Komposita. Wir können eine Klasse Shape
mit einer Methode draw(String fillColor)
erstellen, um die Form mit der angegebenen Farbe zu zeichnen. Shape.java
package com.journaldev.design.composite;
public interface Shape {
public void draw(String fillColor);
}
Zusammensetzungsdesignmuster-Blattobjekte
Das Blatt des Zusammensetzungsdesignmusters implementiert die Grundkomponente, und dies sind die Bausteine für das Komposit. Wir können mehrere Blattobjekte wie Dreieck, Kreis usw. erstellen. Dreieck.java
package com.journaldev.design.composite;
public class Triangle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Triangle with color "+fillColor);
}
}
Kreis.java
package com.journaldev.design.composite;
public class Circle implements Shape {
@Override
public void draw(String fillColor) {
System.out.println("Drawing Circle with color "+fillColor);
}
}
Verbundobjekt
A composite object contains group of leaf objects and we should provide some helper methods to add or delete leafs from the group. We can also provide a method to remove all the elements from the group. Drawing.java
package com.journaldev.design.composite;
import java.util.ArrayList;
import java.util.List;
public class Drawing implements Shape{
//Sammlung von Formen
private List shapes = new ArrayList();
@Override
public void draw(String fillColor) {
for(Shape sh : shapes)
{
sh.draw(fillColor);
}
}
//Form zum Zeichnen hinzufügen
public void add(Shape s){
this.shapes.add(s);
}
//Form aus dem Zeichnen entfernen
public void remove(Shape s){
shapes.remove(s);
}
//Alle Formen entfernen
public void clear(){
System.out.println("Clearing all the shapes from drawing");
this.shapes.clear();
}
}
Beachten Sie, dass der Verbund ebenfalls die Komponente implementiert und sich ähnlich wie das Blatt verhält, außer dass er eine Gruppe von Blattelementen enthalten kann. Unsere Verbundmusterimplementierung ist fertig und wir können sie mit einem Client-Programm testen.
Client-Programm des Verbund-Entwurfsmusters
TestCompositePattern.java
package com.journaldev.design.test;
import com.journaldev.design.composite.Circle;
import com.journaldev.design.composite.Drawing;
import com.journaldev.design.composite.Shape;
import com.journaldev.design.composite.Triangle;
public class TestCompositePattern {
public static void main(String[] args) {
Shape tri = new Triangle();
Shape tri1 = new Triangle();
Shape cir = new Circle();
Drawing drawing = new Drawing();
drawing.add(tri1);
drawing.add(tri1);
drawing.add(cir);
drawing.draw("Red");
drawing.clear();
drawing.add(tri);
drawing.add(cir);
drawing.draw("Green");
}
}
Die Ausgabe des oben genannten Client-Programms des Verbundmusters lautet:
Drawing Triangle with color Red
Drawing Triangle with color Red
Drawing Circle with color Red
Clearing all the shapes from drawing
Drawing Triangle with color Green
Drawing Circle with color Green
Wichtige Punkte des Verbundmusters
- Das Verbundmuster sollte nur angewendet werden, wenn die Gruppe von Objekten sich wie ein einzelnes Objekt verhalten soll.
- Zusammengesetztes Entwurfsmuster kann verwendet werden, um eine baumartige Struktur zu erstellen.
java.awt.Container#add(Component)
ist ein großartiges Beispiel für das zusammengesetzte Muster in Java und wird viel in Swing verwendet. Frühere Artikel zu strukturellen Entwurfsmustern:
Source:
https://www.digitalocean.com/community/tutorials/composite-design-pattern-in-java