Heim > Java > javaLernprogramm > Was sind die Prinzipien und Implementierungsmethoden des Dekorationsmusters in Java-Entwurfsmustern?

Was sind die Prinzipien und Implementierungsmethoden des Dekorationsmusters in Java-Entwurfsmustern?

WBOY
Freigeben: 2023-04-22 10:52:08
nach vorne
1130 Leute haben es durchsucht

1. Was ist der Dekorationsmodus?

Wenn wir die Funktionalität eines Objekts verbessern oder erweitern möchten, aber keine Unterklassen erben möchten, können wir die Verwendung in Betracht ziehen Dekorationsmodus.

Die Verwendung des Dekorationsmodus zur Verbesserung einer bestimmten Funktion eines Objekts ist flexibler als die Generierung einer Unterklasse und deren anschließende Verbesserung.

2. So implementieren Sie

1) Abstrakte Komponente: Definieren Sie eine abstrakte Klasse, die die Methode definiert, die der „Dekorator“ „dekorieren“ muss #🎜🎜 ## 🎜🎜#2) Konkrete Komponente: eine Unterklasse der abstrakten Komponente. Werden Sie eine „dekorierte Klasse“

3) Dekorative Komponente: Es ist auch eine Unterklasse der abstrakten Komponente. Diese Klasse enthält eine Referenz auf den „Dekorator“ und wird zum Aufrufen der Methoden des Dekorators verwendet. Es kann eine abstrakte Klasse oder eine nicht abstrakte Klasse sein.

4) Spezifische Dekorationsklasse: Es handelt sich um eine Unterklasse dekorativer Komponenten, genannt „Dekorator“

3. Code-Implementierung

1 ) Abstrakte Komponente

/**
 * 抽象组件,定义了被装饰类需要装饰的方法
 */
public abstract class ICake {
    /**
     * 需要装饰的方法
     * @return
     */
    public abstract int getPrice();
}
Nach dem Login kopieren

2) Dekorateur

/**
 * 被装饰者,是抽象组件的一个子类,定义需要被装饰的方法
 */
public class Cake extends ICake {
    /**
     * 被装饰类中,装饰方法的基本实现
     * @return
     */
    @Override
    public int getPrice() {
        System.out.println("getPrice");
       return 100;
    }
}
Nach dem Login kopieren

3) Dekorationskurs

/**
 * 装饰类,也是抽象组件的一个子类。
 * 可以是抽象类,也可以是非抽象类。
 */
public abstract class CakeDecorator extends ICake {
    /**
     * 被装饰类的引用,需要在装饰类中,调用到被装饰类的方法。
     */
    ICake cake;
    public CakeDecorator(ICake cake){
        this.cake = cake;
    }
}
Nach dem Login kopieren

4) Betondekoration

/**
 * 具体装饰类
 */
public class BlueBerryCake extends CakeDecorator {
    public BlueBerryCake(ICake cake) {
        super(cake);
    }
    /**
     * 被装饰的方法
     * 在调用到被装饰类的基础方法后,还要调用装饰类要增强的方法
     * @return
     */
    @Override
    public float getPrice(){
        return cake.getPrice()+elsePrice();
    }
    /**
     * 增强的方法
     * @return
     */
    private float elsePrice(){
        System.out.println("else getPrice");
        return 50;
    }
}
Nach dem Login kopieren
#🎜 🎜#5) Test class

public class TestDecorator {
    public static void main(String args[]){
        ICake cake = new Cake();
        CakeDecorator decorater = new BlueBerryCake(cake);
        float price = decorater.getPrice();
        System.out.println(price);
    }
}
Nach dem Login kopieren
4. Erweiterung

1) Die Erweiterung einer bestimmten Methode kann auch durch die Verwendung der Unterklassenvererbung erreicht werden. Welche Vorteile bietet der Dekorationsmodus im Vergleich zur Implementierung im Dekorationsmodus?

Der Dekorateur und der Dekorateur sind lose gekoppelt. Die Dekorationsklasse hängt nur von der abstrakten Komponente ab. Die Dekorationsklasse muss nur wissen, dass die dekorierte Klasse eine Unterklasse der abstrakten Komponente ist, ohne zu wissen, um welche Unterklasse es sich handelt.

Der Dekorationsmodus erfüllt das „Öffnen-Schließen-Prinzip“, und Sie können eine Dekorationsklasse für die Komponente hinzufügen, ohne die spezifische Komponente zu ändern.

5.JavaIo und Dekorationsmodus

Viele Klassen im java.IO-Paket verwenden den Dekorationsmodus.

Reader

FileReader

BuffertReader

Das obige ist der detaillierte Inhalt vonWas sind die Prinzipien und Implementierungsmethoden des Dekorationsmusters in Java-Entwurfsmustern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
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