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 für einen Moment an, dass Sie auf der Suche nach einer Freundin sind. 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 weiteres Design erstellen, bei dem jede Persönlichkeit oder jedes Hobby zu einer Dekoration wird, die dynamisch dem Körper jedes Mädchens hinzugefügt werden kann.
2. Struktur des Klassendiagramms
3. Beispielcode für ein Dekorationsmuster
Mädchen.java
Kopieren Sie den Codecode wie folgt:
öffentliche abstrakte Klasse Mädchen {
Stringbeschreibung = „keine Angaben“;
öffentlicher String getDescription(){
Rückgabebeschreibung;
}
}
AmericanGirl.java
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse AmericanGirl verlängert Girl {
publicAmericanGirl() {
description = "+Amerikanisch";
}
}
EuropeanGirl.java
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse EuropeanGirl verlängert Girl {
öffentliches EuropeanGirl(){
description = "+Europäisch";
}
}
GirlDecorator.java
Kopieren Sie den Codecode wie folgt:
öffentliche abstrakte Klasse GirlDecorator erweitert Girl {
öffentlicher abstrakter String getDescription();
}
Science.java
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Wissenschaft erweitert GirlDecorator {
privates Mädchen;
öffentliche Wissenschaft (Mädchen){
this.girl = Mädchen;
}
@Override
öffentlicher String getDescription() {
return this.girl.getDescription() + „+Like Science“;
}
public void caltulateStuff() {
System.out.println("wissenschaftliche Berechnung!");
}
}
Art.java
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Art erweitert GirlDecorator {
privates Mädchen;
öffentliche Kunst (Mädchen Mädchen){
this.girl = Mädchen;
}
@Override
öffentlicher String getDescription() {
return this.girl.getDescription() + „+Like Art“;
}
public void draw() {
System.out.println("Bilder zeichnen!");
}
}
Main.java
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Main {
public static void main(String[] args) {
//Gewöhnliches amerikanisches Mädchen
Mädchen g1 = neues AmericanGirl();
System.out.println(g1.getDescription());
//Diejenigen, die Wissenschaft mögen
Wissenschaft g2 = neue Wissenschaft(g1);
System.out.println(g2.getDescription());
//Wer Kunst mag
Art g3 = neue Art(g2);
System.out.println(g3.getDescription());
}
}
4. Anwendung des Dekorationsmusters in JDK
IO in Java ist das typischste Beispiel für die Verwendung des Dekoratormusters.
Das Folgende ist ein einfaches Beispiel für die Dekoration eines InputStreamReader-Objekts durch ein BufferedReader-Objekt:
Kopieren Sie den Codecode wie folgt:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//System.in ist ein InputStream-Objekt
(Volltext endet)