Heim >Java >javaLernprogramm >Java Design Patterns Decorator Pattern Detaillierte Erklärung und Codebeispiele
Das Dekoratormuster kann vorhandenen Objekten dynamisch Funktionen hinzufügen. Im Folgenden werde ich anhand eines einfachen Beispiels demonstrieren, wie das Dekoratormuster in einem Programm verwendet wird.
1. Dekorationsmuster
Nehmen wir an, Sie suchen eine Freundin. Es gibt viele Mädchen aus verschiedenen Ländern, wie den Vereinigten Staaten, China, Japan, Frankreich usw. Jedes von ihnen hat unterschiedliche Persönlichkeiten und Interessen. Wenn Sie eine solche Situation im Programm simulieren müssen, gehen Sie davon aus, dass jedes Mädchen für eins ist In der Java-Klasse wird es Tausende von Klassen geben, was zu einer Klassenerweiterung führt und die Skalierbarkeit eines solchen Designs relativ schlecht sein wird. Denn wenn wir ein neues Mädchen brauchen, müssen wir eine neue Java-Klasse erstellen, was tatsächlich gegen das OCP-Prinzip (Open for Extension, Closed for Modification) verstößt, das bei der Programmentwicklung befolgt werden muss.
Lassen Sie uns ein anderes Design erstellen, damit jede Persönlichkeit oder jedes Hobby zu einer Dekoration wird, die dynamisch dem Körper jedes Mädchens hinzugefügt werden kann.
2. Klassendiagrammstruktur
3. Beispielcode für ein Dekorationsmuster
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()); } }
Die Anwendung des Dekoratormusters im JDK
Das IO in Java verwendet das typischste Beispiel .
Das Folgende ist ein einfaches Beispiel für die Dekoration eines InputStreamReader-Objekts durch ein BufferedReader-Objekt:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); //System.in is an InputStream object
Ausführlichere Erläuterungen zu Java-Entwurfsmustern und Codebeispiele des Dekorationsmusters finden Sie hier zur chinesischen PHP-Website!