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

高洛峰
高洛峰original
2017-01-19 15:48:491236parcourir

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;
 }
}

AmericanGirl.java

public class AmericanGirl extends Girl {
 public AmericanGirl() {
  description = "+American";
 }
}

EuropeanGirl.java

public class EuropeanGirl extends Girl {
 public EuropeanGirl(){
  description = "+European";
 }
}

GirlDecorator.java

public abstract class GirlDecorator extends Girl {
 public abstract String getDescription();
}

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

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

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

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

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 !

Déclaration:
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