JavaRush /Blog Java /Random-FR /Modèle de conception de décorateur avec exemples
Sbv239
Niveau 23
Санкт-Петербург

Modèle de conception de décorateur avec exemples

Publié dans le groupe Random-FR
Le modèle de conception décorateur nous permet d'ajouter dynamiquement des fonctionnalités à un objet sans affecter le comportement des objets de la même classe. Cela semble un peu déroutant, mais une fois que vous aurez vu le code, tout deviendra plus clair. Fonctionnalités - Un décorateur vous permet d'ajouter des fonctionnalités à un objet existant sans modifier sa structure, c'est-à-dire que la classe d'origine ne change pas - Le modèle de conception du décorateur est un modèle structurel qui fournit un wrapper pour une classe existante - Les classes du décorateur sont créées pour envelopper la classe d'origine et fournir des fonctionnalités supplémentaires tout en préservant intactes les signatures de méthode de la classe d'origine - Le modèle de conception du décorateur est le plus souvent utilisé pour suivre le principe de responsabilité unique de SOLID, car nous ne chargeons pas la classe d'origine avec des responsabilités supplémentaires, mais les divisons en classes de décorateurs - Le décorateur est structurellement presque similaire au modèle de chaîne de responsabilité (chaîne de responsabilité) Les points clés suivants doivent être pris en compte - Un décorateur est utile pour pouvoir modifier le comportement d'un objet pendant l'exécution. Ce code est facile à maintenir et à étendre. - L'inconvénient de ce modèle est qu'un grand nombre d'objets décorateurs du même type sont utilisés - Le modèle décorateur est souvent utilisé dans les classes Java IO (FileReader, BufferedReader, etc.) Ce que nous allons faire - Créer une interface - Créer du béton implémentations de cette interface - Créer un décorateur abstrait, implémentant cette interface - Créons un décorateur concret qui hérite d'un décorateur abstrait - Utiliser un décorateur concret pour "décorer" les implémentations concrètes de l'interface Implémentation : Nous allons créer l'interface Shape et les classes concrètes qui implémentent cette interface. Ensuite, nous allons créer une classe de décorateur abstrait, ShapeDecorator, qui implémente l'interface Shape et possède un objet Shape comme champ de classe. Modèle de conception de décorateur avec exemples - 1 - Shape est le nom de l'interface - Les classes Rectangle, Triangle et Circle seront des classes concrètes qui implémentent l'interface Shape - ShapeDecorator est une classe de décorateur abstrait qui implémente la même interface Shape - RedShapeDecorator est une classe concrète qui implémente ShapeDecorator - Demo est une classe de démonstration dans laquelle nous utiliserons RedShapeDecorator pour décorer des objets Shape Étape 1 : créer l'interface Shape
public interface Shape {
    void draw();
}
Étape 2 : Créons plusieurs implémentations de cette interface. Dans l'exemple ci-dessous, il n'y aura qu'un cercle, mais en fait nous en créerons quelques autres : un rectangle et un triangle.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Étape 3 : Créer un décorateur abstrait qui implémente l'interface Shape
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

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

    public void draw() {
        decoratedShape.draw();
    }
}
Étape 4 : créer une classe de décorateur concret qui hérite de la classe abstraite
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. Цвет границы: красный");
    }
}
Étape 5 : Utilisez RedShapeDecorator pour colorer nos objets
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();
    }
}
Étape 6 : regardez la console et réjouissez-vous
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Après avoir analysé le design pattern décorateur à titre d'exemple, nous pouvons conclure que son utilisation est justifiée dans les cas suivants : - Lorsque l'on souhaite ajouter, améliorer ou éventuellement supprimer le comportement ou l'état d'un objet - Lorsque l'on souhaite simplement en modifier la fonctionnalité. d'un objet spécifique d'une classe et ne laisse aucun changement au reste. Merci ! Dépôt avec fichiers de projet Basé sur un article du site geeksforgeeks.org Mon blog pour un développeur Java débutant
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION