JavaRush /Java-Blog /Random-DE /Dekorateur-Designmuster mit Beispielen
Sbv239
Level 23
Санкт-Петербург

Dekorateur-Designmuster mit Beispielen

Veröffentlicht in der Gruppe Random-DE
Das Dekorator-Entwurfsmuster ermöglicht es uns, einem Objekt dynamisch Funktionalität hinzuzufügen, ohne das Verhalten von Objekten derselben Klasse zu beeinflussen. Es klingt ein wenig verwirrend, aber sobald Sie den Code sehen, wird alles klarer. Funktionen – Mit einem Dekorator können Sie einem vorhandenen Objekt Funktionalität hinzufügen, ohne seine Struktur zu ändern, d Umhüllen Sie die ursprüngliche Klasse und stellen Sie zusätzliche Funktionalität bereit, während die Methodensignaturen der ursprünglichen Klasse intakt bleiben. Das Dekorator-Entwurfsmuster wird am häufigsten verwendet, um dem Prinzip der Einzelverantwortung von SOLID zu folgen, da wir die ursprüngliche Klasse nicht mit zusätzlichen Verantwortlichkeiten belasten, sondern diese aufteilen in Dekoratorklassen - Der Dekorator ähnelt strukturell fast dem Chain-of-Responsibility-Muster (Chain of Responsibility). Die folgenden wichtigen Punkte müssen berücksichtigt werden : - Ein Dekorator ist nützlich, um das Verhalten eines Objekts während der Laufzeit ändern zu können. Dieser Code ist einfach zu warten und zu erweitern. - Der Nachteil dieses Musters besteht darin, dass eine große Anzahl von Dekoratorobjekten desselben Typs verwendet wird. - Das Dekoratormuster wird häufig in Java IO-Klassen (FileReader, BufferedReader usw.) verwendet. Was wir tun werden : - Eine Schnittstelle erstellen - Konkret erstellen Implementierungen dieser Schnittstelle - Erstellen Sie einen abstrakten Dekorator und implementieren Sie diese Schnittstelle. - Erstellen Sie einen konkreten Dekorator, der von einem abstrakten Dekorator erbt. - Verwenden Sie einen konkreten Dekorator, um konkrete Implementierungen der Schnittstelle zu „dekorieren“. Implementierung: Wir erstellen die Shape-Schnittstelle und konkrete Klassen die diese Schnittstelle implementieren. Als Nächstes erstellen wir eine abstrakte Dekoratorklasse, ShapeDecorator, die die Shape-Schnittstelle implementiert und über ein Shape-Objekt als Klassenfeld verfügt. Dekorateur-Designmuster mit Beispielen – 1 - Shape ist der Name der Schnittstelle. - Die Klassen Rechteck, Dreieck und Kreis sind konkrete Klassen, die die Schnittstelle Shape implementieren. - ShapeDecorator ist eine abstrakte Dekoratorklasse, die dieselbe Schnittstelle Shape implementiert. - RedShapeDecorator ist eine konkrete Klasse, die ShapeDecorator implementiert. - Demo ist Eine Demo-Klasse, in der wir RedShapeDecorator verwenden, um Shape-Objekte zu dekorieren. Schritt 1 : Erstellen Sie die Shape-Schnittstelle
public interface Shape {
    void draw();
}
Schritt 2 : Lassen Sie uns mehrere Implementierungen dieser Schnittstelle erstellen. Im Beispiel unten wird es nur einen Kreis geben, aber tatsächlich werden wir noch ein paar mehr erstellen: ein Rechteck und ein Dreieck.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Schritt 3 : Erstellen Sie einen abstrakten Dekorator, der die Shape-Schnittstelle implementiert
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

    //Конструктор, принимающий ein Objekt Shape
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    public void draw() {
        decoratedShape.draw();
    }
}
Schritt 4 : Erstellen Sie eine konkrete Dekoratorklasse, die von der abstrakten Klasse erbt
public class RedShapeDecorator extends ShapeDecorator{

    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }

    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }

    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Сообщение от RedShapeDecorator. Цвет границы: красный");
    }
}
Schritt 5 : Verwenden Sie RedShapeDecorator, um unsere Objekte einzufärben
public class Demo {
    public static void main(String[] args)
    {
        Shape circle = new Circle();
        Shape redCircle= new RedShapeDecorator(new Circle());
        Shape redRectangle= new RedShapeDecorator(new Rectangle());
        Shape redTriangle = new RedShapeDecorator(new Triangle());

        System.out.println("\nОбычный круг:");
        circle.draw();

        System.out.println("\nКруг с красной границей:");
        redCircle.draw();

        System.out.println("\nПрямоугольник с красной границей:");
        redRectangle.draw();

        System.out.println("\nТреугольник с красной границей:");
        redTriangle.draw();
    }
}
Schritt 6 : Schauen Sie auf die Konsole und freuen Sie sich
Обычный круг:
Я круг!

Круг с красной границей:
Я круг!
Сообщение от RedShapeDecorator. Цвет границы: красный

Прямоугольник с красной границей:
Я прямоугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Nachdem wir das Dekorator-Entwurfsmuster als Beispiel analysiert haben, können wir zu dem Schluss kommen, dass seine Verwendung in den folgenden Fällen gerechtfertigt ist: - Wenn wir das Verhalten oder den Zustand eines Objekts hinzufügen, verbessern oder möglicherweise entfernen möchten - Wenn wir einfach die Funktionalität ändern möchten eines bestimmten Objekts einer Klasse und lassen Sie den Rest unverändert. Vielen Dank! Repository mit Projektdateien Basierend auf einem Artikel von der Website geeksforgeeks.org Mein Blog für einen Java-Entwickler-Anfänger
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION