Le modèle de décorateur peut ajouter dynamiquement des fonctionnalités aux objets existants. Ci-dessous, j'utiliserai un exemple simple pour montrer comment utiliser le modèle décorateur dans un programme.
1. Modèle de décorateur
Supposons un instant que vous recherchiez une petite amie. Il existe de nombreuses filles de différents pays, comme les États-Unis, la Chine, le Japon, la France, etc. Chacune d'elles a des personnalités et des intérêts différents. Si vous devez simuler une telle situation dans le programme, supposez que chaque fille est pour un. Classe Java, il y aura des milliers de classes, ce qui entraînera l'expansion des classes, et l'évolutivité d'une telle conception sera relativement faible. Parce que si nous avons besoin d'une nouvelle fille, nous devons créer une nouvelle classe Java, ce qui viole en fait le principe OCP (ouvert pour extension, fermé pour modification) qui doit être suivi dans le développement de programmes.
Créons un autre design où chaque personnalité ou passe-temps devient une décoration qui peut être ajoutée de manière dynamique au corps de chaque fille.
2. Structure du diagramme de classes
3. Exemple de code de motif de décorateur
Fille.java
Copiez le code comme suit :
classe abstraite publique Fille {
Description de la chaîne = "pas de particulier" ;
chaîne publique getDescription(){
description du retour ;
}
}
AmericanGirl.java
Copiez le code comme suit :
classe publique AmericanGirl étend Girl {
publicAmericanGirl() {
description = "+Américain" ;
}
}
Fille européenne.java
Copiez le code comme suit :
classe publique EuropeanGirl étend Girl {
fille européenne publique(){
description = "+Européen" ;
}
}
GirlDecorator.java
Copiez le code comme suit :
La classe abstraite publique GirlDecorator étend Girl {
public abstract String getDescription();
}
Science.java
Copiez le code comme suit :
classe publique La science étend GirlDecorator {
fille privée;
Science publique (Fille fille) {
this.girl = fille;
}
@Outrepasser
chaîne publique getDescription() {
return this.girl.getDescription() + "+Like Science" ;
}
public void caltulateStuff() {
System.out.println("calcul scientifique!");
}
}
Art.java
Copiez le code comme suit :
L'art de classe publique étend GirlDecorator {
fille privée;
Art public (Fille fille) {
this.girl = fille;
}
@Outrepasser
chaîne publique getDescription() {
return this.girl.getDescription() + "+Like Art" ;
}
public void draw() {
System.out.println("dessinez des images!");
}
}
Main.java
Copiez le code comme suit :
classe publique Principale {
public static void main (String[] arguments) {
//Fille américaine ordinaire
Fille g1 = new AmericanGirl();
System.out.println(g1.getDescription());
//Ceux qui aiment la science
Science g2 = nouvelle Science (g1) ;
System.out.println(g2.getDescription());
//Ceux qui aiment l'art
Art g3 = nouvel Art (g2);
System.out.println(g3.getDescription());
}
}
4. Application du modèle de décorateur dans JDK
IO en Java est l’exemple le plus typique d’utilisation du modèle décorateur.
Voici un exemple simple de décoration d'un objet InputStreamReader via un objet BufferedReader :
Copiez le code comme suit :
Entrée BufferedReader = new BufferedReader (new InputStreamReader (System.in));
//System.in est un objet InputStream
(Fin du texte intégral)