concept
Le motif du décorateur attache dynamiquement la responsabilité à l'objet. Pour étendre les fonctionnalités, le décorateur offre une alternative plus flexible que l'héritage.
Le décorateur et l'objet décoré ont le même supertype.
Vous pouvez envelopper un objet avec un ou plusieurs décorateurs.
Étant donné que le décorateur et l'objet décoré ont le même supertype, à n'importe quelle occasion où l'objet d'origine (écrit) est requis, l'objet décoré peut être remplacé par lui.
Le décorateur peut ajouter son propre comportement avant et / ou après que les actions du décorateur soient commandées pour atteindre un objectif spécifique.
Les objets peuvent être décorés à tout moment, de sorte que les objets peuvent être décorés dynamiquement et illimités avec votre décorateur préféré pendant l'exécution.
En Java, de nombreuses classes sous l'emballage IO sont l'incarnation de motifs de décorateurs typiques, tels que:
La classe décorative implémente la même interface que la classe décorée.
La classe décorée ne se soucie pas de quelle classe de mise en œuvre est utilisée pour la décorer.
La même méthode commerciale est appelée par la classe décorative pour améliorer les fonctions de la classe décorative.
Exemple:
Diagramme de classe
Interface publique IreRerder {void read (); } Public Class Reader implémente ireader {@Override public void read () {System.out.println ("Read of Reader"); }} classe publique BufferedReader implémente ireader {private ireader mreader; Public BufferedReader (Reader Ireader) {this.mreader = lecteur; } @Override public void read () {System.out.println ("Read of BufferedReader"); mReader.read (); }} Public Class Test {public static void main (String [] args) {Reader Reader = new Reader (); Reader.read (); System.out.println ("-----------"); BufferedReader BufferedReader = new BufferedReader (Reader); BufferedReader.read (); }} Caractéristiques:
1. Les objets décoratifs et les objets réels ont la même interface. De cette façon, l'objet client peut interagir avec l'objet décoratif de la même manière que l'objet réel.
2. L'objet décoratif contient une référence à un véritable objet
3. L'objet décoratif accepte toutes les demandes du client. Il transmet ces demandes à l'objet réel.
4. Décorer les objets peuvent ajouter des fonctionnalités supplémentaires avant ou après le transfert de ces demandes. Cela garantit qu'à l'exécution, des fonctions supplémentaires peuvent être ajoutées à l'extérieur sans modifier la structure d'un objet donné.
Dans la conception orientée objet, les extensions fonctionnelles d'une classe donnée sont généralement obtenues grâce à l'héritage. Après la décoration, l'objet réel est tenu pour améliorer sa fonction.
Différence entre le décorateur et le mode adaptateur:
À propos de nouvelles responsabilités: les adaptateurs peuvent également ajouter de nouvelles responsabilités lors de la conversion, mais l'objectif principal n'est pas. Le modèle de décorateur ajoute principalement de nouvelles responsabilités au décorateur.
À propos de l'objet qu'il enroule: l'adaptateur connaît les détails de l'adaptateur (c'est-à-dire la classe d'adaptateur). Le décorateur sait seulement quelle est son interface.
Quant à son type spécifique (qu'il s'agisse d'une classe de base ou d'une autre classe dérivée), elle n'est connue que pendant l'exécution.