Maison > Java > javaDidacticiel > Explication détaillée du modèle de décorateur de modèles de conception Java et exemples de code

Explication détaillée du modèle de décorateur de modèles de conception Java et exemples de code

高洛峰
Libérer: 2017-01-19 15:48:49
original
1208 Les gens l'ont consulté

Le motif 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 que vous recherchez 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 pour que chaque personnalité ou passe-temps devienne une décoration qui peut être ajoutée dynamiquement au corps de chaque fille.

2. Structure du diagramme de classes

Explication détaillée du modèle de décorateur de modèles de conception Java et exemples de code

3. Exemple de code de modèle de décorateur

Girl.java

public abstract class Girl {
 String description = "no particular";
 public String getDescription(){
  return description;
 }
}
Copier après la connexion

AmericanGirl.java

public class AmericanGirl extends Girl {
 public AmericanGirl() {
  description = "+American";
 }
}
Copier après la connexion

EuropeanGirl.java

public class EuropeanGirl extends Girl {
 public EuropeanGirl(){
  description = "+European";
 }
}
Copier après la connexion

GirlDecorator.java

public abstract class GirlDecorator extends Girl {
 public abstract String getDescription();
}
Copier après la connexion

Science.java

public class Science extends GirlDecorator {
 private Girl girl;
 public Science(Girl girl){
  this.girl = girl;
 }
 @Override
 public String getDescription() {
  return this.girl.getDescription() + "+Like Science";
 }
 public void caltulateStuff() {
  System.out.println("scientific calculation!");
 }
}
Copier après la connexion

Art . java

public class Art extends GirlDecorator {
 private Girl girl;
 public Art(Girl girl){
  this.girl = girl;
 }
 @Override
 public String getDescription() {
  return this.girl.getDescription() + "+Like Art";
 }
 public void draw() {
  System.out.println("draw pictures!");
 }
}
Copier après la connexion

Main.java

public class Main {
 public static void main(String[] args) {
  //普通美国女孩
  Girl g1 = new AmericanGirl();
  System.out.println(g1.getDescription());
  //喜欢科学的
  Science g2 = new Science(g1);
  System.out.println(g2.getDescription());
  //喜欢艺术的
  Art g3 = new Art(g2);
  System.out.println(g3.getDescription());
 }
}
Copier après la connexion

4. L'application du modèle décorateur dans JDK

L'IO en Java utilise le modèle décorateur. .

Ce qui suit est un exemple simple de décoration d'un objet InputStreamReader via un objet BufferedReader :

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//System.in is an InputStream object
Copier après la connexion

Pour des explications plus détaillées des modèles de conception Java et des exemples de code du modèle de décorateur, veuillez prêter attention vers le site PHP 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