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.
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
/** * 抽象组件,定义了被装饰类需要装饰的方法 */ public abstract class ICake { /** * 需要装饰的方法 * @return */ public abstract int getPrice(); }
2) Dekorateur
/** * 被装饰者,是抽象组件的一个子类,定义需要被装饰的方法 */ public class Cake extends ICake { /** * 被装饰类中,装饰方法的基本实现 * @return */ @Override public int getPrice() { System.out.println("getPrice"); return 100; } }
3) Dekorationskurs
/** * 装饰类,也是抽象组件的一个子类。 * 可以是抽象类,也可以是非抽象类。 */ public abstract class CakeDecorator extends ICake { /** * 被装饰类的引用,需要在装饰类中,调用到被装饰类的方法。 */ ICake cake; public CakeDecorator(ICake cake){ this.cake = cake; } }
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; } }
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); } }
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!