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
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 !