裝飾器模式是一種結構型設計模式,允許動態添加物件功能,無需修改原始類別。它透過抽象組件、具體組件、抽象裝飾器和具體裝飾器的協作實現,可以靈活擴展類別功能,滿足變化的需求。範例中,將牛奶和摩卡裝飾器添加到Espresso,總價為2.29美元,展示了裝飾器模式在動態修改物件行為方面的強大功能。
Java 設計模式之裝飾器模式剖析
引言
裝飾器模式是一種結構型設計模式,它允許動態地將功能添加到物件上,而無需修改其基礎類別。透過使用裝飾器對象,可以靈活地擴展類別功能,滿足不斷變化的需求。
原理
裝飾器模式透過以下方式運作:
程式碼範例
// 抽象组件 interface Beverage { double cost(); } // 具体组件 class Espresso implements Beverage { @Override public double cost() { return 1.99; } } // 抽象装饰器 abstract class CondimentDecorator implements Beverage { protected Beverage beverage; public CondimentDecorator(Beverage beverage) { this.beverage = beverage; } } // 具体装饰器 class Milk extends CondimentDecorator { public Milk(Beverage beverage) { super(beverage); } @Override public double cost() { return beverage.cost() + 0.10; } } // 具体装饰器 class Mocha extends CondimentDecorator { public Mocha(Beverage beverage) { super(beverage); } @Override public double cost() { return beverage.cost() + 0.20; } } // 实战案例 public class CoffeeShop { public static void main(String[] args) { Beverage espresso = new Espresso(); // 添加牛奶和摩卡装饰器 Beverage milkEspresso = new Milk(espresso); Beverage mochaMilkEspresso = new Mocha(milkEspresso); // 计算饮料总价 double totalCost = mochaMilkEspresso.cost(); System.out.println("Beverage cost: " + totalCost); } }
輸出:
Beverage cost: 2.29
##結論
裝飾器模式可用於在不修改現有程式碼的情況下動態擴充物件功能。它提供了一種靈活而優雅的方式來滿足不斷變化的需求,同時保持程式碼的可維護性和可擴展性。以上是Java設計模式之裝飾器模式剖析的詳細內容。更多資訊請關注PHP中文網其他相關文章!