1. Gebrauchsanweisung
(1) Das Dekoratormuster kann flexiblere Erweiterungsfunktionen bieten als die Vererbung. Durch die Kombination verschiedener Dekoratorobjekte können Sie mit mehreren Methoden unterschiedliche Ergebnisse erzielen. Das Dekoratormuster ist skalierbarer als die Vererbung und folgt perfekt dem Öffnungs- und Schließprinzip. Die Vererbung ist eine statische Zusatzverantwortung, während der Dekorator eine dynamische Zusatzverantwortung ist.
(2) Die Dekorationsklasse und die dekorierte Klasse können unabhängig voneinander entwickelt werden und sind nicht aneinander gekoppelt. Der Dekorationsmodus ist ein alternativer Modus zur Vererbung. Der Dekorationsmodus kann die Funktionen einer Implementierungsklasse dynamisch erweitern.
2. Beispiel
public class HelloWorld { public static void main(String[] args) { //点一份炒饭 FastFood food = new FriedRice(); //花费的价格 System.out.println(food.getDesc() + " " + food.cost() + "元"); System.out.println("========"); //点一份加鸡蛋的炒饭 FastFood food1 = new FriedRice(); food1 = new Egg(food1); //花费的价格 System.out.println(food1.getDesc() + " " + food1.cost() + "元"); System.out.println("========"); //点一份加培根的炒面 FastFood food2 = new FriedNoodles(); food2 = new Bacon(food2); //花费的价格 System.out.println(food2.getDesc() + " " + food2.cost() + "元"); } } // 快餐抽象类 abstract class FastFood { private float price; private String desc; public FastFood() {} public FastFood(float price, String desc) { this.price = price; this.desc = desc; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } // 获取价格 public abstract float cost(); } // 炒饭 class FriedRice extends FastFood { public FriedRice() { super(10, "炒饭"); } @Override public float cost() { return getPrice(); } } // 炒面 class FriedNoodles extends FastFood { public FriedNoodles() { super(12, "炒面"); } @Override public float cost() { return getPrice(); } } // 配料 abstract class Garnish extends FastFood { private FastFood fastFood; public FastFood getFastFood() { return fastFood; } public void setFastFood(FastFood fastFood) { this.fastFood = fastFood; } public Garnish(FastFood fastFood, float price, String desc) { super(price, desc); this.fastFood = fastFood; } } // 鸡蛋配料 class Egg extends Garnish { public Egg(FastFood fastFood) { super(fastFood, 1, "鸡蛋"); } @Override public float cost() { return getPrice() + getFastFood().getPrice(); } @Override public String getDesc() { return super.getDesc() + getFastFood().getDesc(); } } //培根配料 class Bacon extends Garnish { public Bacon(FastFood fastFood) { super(fastFood,2,"培根"); } @Override public float cost() { return getPrice() + getFastFood().getPrice(); } @Override public String getDesc() { return super.getDesc() + getFastFood().getDesc(); } }
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Java-Decorator-Muster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!