Le décorateur est souvent traduit par «décoration». Ces deux entités sont nécessaires en mode décorateur.
Définition du décorateur: ajoute dynamiquement quelques responsabilités supplémentaires à un objet, comme peindre le mur. L'utilisation du mode décorateur est plus flexible que l'utilisation de la génération de sous-classes pour atteindre l'expansion fonctionnelle.
Pourquoi utiliser le décorateur
Nous pouvons généralement utiliser l'héritage pour réaliser l'expansion des fonctions. Doit prévoir ces fonctions d'extension.
La raison de l'utilisation du décorateur est que ces fonctions doivent être décidées dynamiquement par l'utilisateur pour rejoindre. Decorator fournit une méthode "plug and play" pour décider quand ajouter les fonctionnalités pendant l'exécution.
Comment utiliser le mode décoratif
Prenez l'exemple de la conduite dans l'adaptateur. Les tas de conduite, comme creuser.
Créons d'abord une interface:
La copie de code est la suivante:
travail d'interface publique {
public void insert ();
}
Le travail d'interface a une implémentation spécifique: insérer des tas carrés ou des piles circulaires. Prenons l'insertion d'un tas carré à titre d'exemple:
La copie de code est la suivante:
classe publique Squarepeg implémente le travail {
public void insert () {
System.out.println ("insertion de pile carrée");
}
}
Il y a maintenant une application: avant que la pile ne soit entraînée, creusant un trou, et une fois la pile, la planche en bois est clouée sur la pile. peut être nécessaire pour clouer le rack après que la pile soit entraînée (juste une métaphore).
Ensuite, nous utilisons le mode décorateur, où le tas carré squarepeg est le décoré (peint par la peinture), nous devons peindre un peu de "peinture" sur le décore, et ces peintures sont ces fonctions supplémentaires.
La copie de code est la suivante:
Décorateur de classe publique implémente le travail {
travail privé;
// La fonctionnalité supplémentaire est emballée dans cette liste
Private ArrayList autres = new ArrayList ();
// utilise la nouvelle méthode combinée dans le constructeur pour introduire des objets de travail;
Décorateur public (travail de travail) {
this.work = work;
autres.add ("creuser un trou");
autres.add ("Nail Board");
}
public void insert () {
NewMethod ();
}
// Dans la nouvelle méthode, nous ajoutons d'autres méthodes avant d'insérer, l'ordre ici est spécifié par l'utilisateur de manière flexible
public void NewMethod () {
autreMethod ();
work.insert ();
}
public void OtherMethod () {
ListIterator listIterator = autres.ListIterator ();
while (listIterator.hasnext ()) {
System.out.println (((String) (listIterator.next ())) + "In Progress");
}
}
}
Dans l'exemple ci-dessus, nous avons classé les trous de creusement et les planches de clouage devant l'insert de la pile.
Ok, le mode décorateur est sorti, voyons comment l'appeler:
La copie de code est la suivante:
Travail squarepeg = new squarepeg ();
Decorator de travail = nouveau décorateur (Squarepeg);
décorateur.insert ();
Le mode décorateur est terminé ici.
Si vous faites attention, vous constaterez que l'appel ci-dessus est similaire à l'appel que nous lisons lorsque nous lisons le fichier:
La copie de code est la suivante:
FileReader FR = nouveau FileReader (nom de fichier);
BufferedReader br = new BufferedReader (FR);
En fait, l'API d'E / S de Java est mise en œuvre en utilisant le décorateur.
Mise en œuvre du décorateur dans Jive
Dans le système de forum, certains caractères spéciaux ne peuvent pas apparaître dans le forum, comme "Down with xxx", nous devons filtrer ces polices "réactionnaires". Ne les laissez pas apparaître ou les afficher dans une luminosité élevée.
Dans un article en parlant spécifiquement de Jive dans la colonne IBM Java, il a été mentionné que ForumMessageFilter.java dans Jive utilise le mode décorateur. , alors vous pouvez réorganiser ForumMessageFilter comme mode décorateur.
Par conséquent, lorsque nous décidons si c'est vraiment le mode décorateur et que nous utiliserons vraiment le mode décorateur, nous devons saisir la définition du mode décorateur et les rôles impliqués (décorer et décorateur).