Heim >Java >javaLernprogramm >Java Design Patterns Decorator Pattern Detaillierte Erklärung und Codebeispiele

Java Design Patterns Decorator Pattern Detaillierte Erklärung und Codebeispiele

高洛峰
高洛峰Original
2017-01-19 15:48:491203Durchsuche

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

Java Design Patterns Decorator Pattern Detaillierte Erklärung und Codebeispiele

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn