Maison > Java > javaDidacticiel > le corps du texte

Quelles sont les méthodes d'implémentation du modèle décorateur dans le framework Java ?

WBOY
Libérer: 2024-06-01 19:37:00
original
556 Les gens l'ont consulté

Le modèle de décorateur peut être implémenté dans le framework Java des trois manières suivantes : 1. Décorateur d'interface : créez une nouvelle classe qui implémente une interface spécifique et ajoutez un comportement à une classe existante. 2. Décorateur de classe : créez de nouvelles classes qui héritent des classes existantes et ajoutez de nouveaux comportements. 3. Décorateur d'annotations : utilisez des annotations pour étendre les classes existantes et ajouter des comportements via des annotations personnalisées. Ce modèle est largement utilisé dans les frameworks de journalisation, tels que le filtrage des journaux ou l'ajout d'horodatages.

Quelles sont les méthodes dimplémentation du modèle décorateur dans le framework Java ?

Comment implémenter le modèle décorateur dans le framework Java

Le modèle décorateur est un modèle de conception structurelle qui vous permet d'ajouter dynamiquement de nouvelles fonctionnalités aux objets sans modifier la classe d'origine. Dans le framework Java, le modèle décorateur a les méthodes d'implémentation suivantes :

1. Décorateur d'interface

Cette méthode d'implémentation étend une classe existante en créant une nouvelle classe qui implémente une interface spécifique. Les nouvelles classes peuvent ajouter un comportement supplémentaire aux classes existantes sans modifier le code de la classe existante.

public interface Shape {
    void draw();
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle");
    }
}

public class DecoratedRectangle implements Shape {
    private Shape shape;

    public DecoratedRectangle(Shape shape) {
        this.shape = shape;
    }

    @Override
    public void draw() {
        shape.draw();
        System.out.println("Adding extra decoration to rectangle");
    }
}
Copier après la connexion

2. Class Decorator

Cette implémentation étend une classe existante en créant une nouvelle classe qui hérite de la classe existante et ajoute un nouveau comportement.

public class Shape {
    public void draw() {
        System.out.println("Drawing a shape");
    }
}

public class DecoratedShape extends Shape {
    @Override
    public void draw() {
        super.draw();
        System.out.println("Adding extra decoration to shape");
    }
}
Copier après la connexion

3. Décorateur d'annotations

Cette implémentation utilise des annotations Java pour étendre les classes existantes. Un nouveau comportement peut être ajouté en créant une annotation personnalisée, puis en appliquant l'annotation à une classe existante.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Decorated {
    String value();
}

public class Shape {
    public void draw() {
        System.out.println("Drawing a shape");
    }
}

@Decorated("rectangle")
public class Rectangle extends Shape {
    @Override
    public void draw() {
        super.draw();
        System.out.println("Drawing a rectangle");
    }
}
Copier après la connexion

Cas pratique

Dans le framework de journalisation, le modèle décorateur est utilisé pour ajouter des fonctionnalités supplémentaires aux journaux, telles que le filtrage, l'ajout d'horodatages ou l'envoi de journaux vers différentes destinations. Par exemple, ce qui suit montre un cas pratique du modèle décorateur utilisant le framework Log4j :

import org.apache.log4j.Logger;
import org.apache.log4j.Layout;
import org.apache.log4j.Appender;
import org.apache.log4j.varia.LevelMatchFilter;

public class MyLoggingAppender extends AppenderSkeleton {

    private Appender appender;

    public MyLoggingAppender(Layout layout, Appender appender) {
        super(layout);
        this.appender = appender;
    }

    @Override
    public void close() {
        appender.close();
    }

    @Override
    public boolean requiresLayout() {
        return false;
    }

    @Override
    protected void append(LoggingEvent event) {
        if (LevelMatchFilter()) {
            appender.doappend(new LoggingEvent(event.getLoggerName(), event.getLevel(), event.getMessage(), event.getThreadName(), event.getTimeStamp(), event.getLocationInfo(), event.getThrowableInformation(), event.getNDC(), event.getMDCCopy()));
        }
    }
}
Copier après la connexion

Dans ce cas, la classe MyLoggingAppender est un décorateur qui étend la classe Appender en ajoutant une fonctionnalité de filtrage. Il transmet les événements de journal à l'Appender d'origine, mais uniquement si les événements de journal correspondent au filtre spécifié.

En bref, en utilisant le modèle décorateur, vous pouvez étendre les fonctionnalités des objets Java sans modifier la classe d'origine, améliorant ainsi l'évolutivité et la flexibilité du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal