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

Java Design Patterns Decorator Pattern Detaillierte Erklärung und Codebeispiele

高洛峰
Freigeben: 2017-01-19 15:48:49
Original
1210 Leute haben es durchsucht

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;
 }
}
Nach dem Login kopieren

AmericanGirl.java

public class AmericanGirl extends Girl {
 public AmericanGirl() {
  description = "+American";
 }
}
Nach dem Login kopieren

EuropeanGirl.java

public class EuropeanGirl extends Girl {
 public EuropeanGirl(){
  description = "+European";
 }
}
Nach dem Login kopieren

GirlDecorator.java

public abstract class GirlDecorator extends Girl {
 public abstract String getDescription();
}
Nach dem Login kopieren

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!");
 }
}
Nach dem Login kopieren

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!");
 }
}
Nach dem Login kopieren

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());
 }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Ausführlichere Erläuterungen zu Java-Entwurfsmustern und Codebeispiele des Dekorationsmusters finden Sie hier zur chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage