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.
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"); } }
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"); } }
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"); } }
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())); } } }
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!