装饰器模式是一种结构型设计模式,允许动态添加对象功能,无需修改原始类。它通过抽象组件、具体组件、抽象装饰器和具体装饰器的协作实现,可以灵活扩展类功能,满足变化的需求。示例中,将牛奶和摩卡装饰器添加到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中文网其他相关文章!