一、什么是装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原有对象结构的情况下,为对象动态地添加新的功能。通过将对象包装在装饰器类中,可以实现功能的增强,同时保持类的灵活性和可扩展性。 装饰器模式的核心思想是通过组合而非继承来实现功能的扩展。
二、装饰器模式主要是解决了什么问题?
装饰器模式主要解决了以下两个问题:
- 动态扩展对象功能:在传统的继承机制中,扩展对象的功能通常需要通过子类化来实现。然而,继承是静态的,一旦类被定义,其行为就固定了。装饰器模式通过组合的方式,允许在运行时动态地为对象添加功能,而不需要修改原有代码。
- 避免类爆炸:如果使用继承来扩展功能,可能会导致类的数量急剧增加(类爆炸问题)。装饰器模式通过将功能分解为多个小的装饰器类,避免了类的过度膨胀,使得系统更加灵活和可维护。
三、装饰器模式的实现
装饰器模式的核心是:
- 抽象组件(Component):定义一个接口,表示可以动态扩展的对象。
- 具体组件(Concrete Component):实现组件接口的基本对象,可以被装饰器包装。
- 抽象装饰器(Decorator):持有一个组件对象,并实现组件接口,主要用于扩展功能。
- 具体装饰器(Concrete Decorator):继承装饰器,实现具体的功能增强。
实现步骤:
- 定义组件接口(Component) 这是所有具体组件和装饰器的共同接口,定义了核心行为。
public interface Coffee {
String getDescription(); // 获取咖啡描述
double getCost(); // 获取咖啡价格
}
- 实现具体组件(ConcreteComponent) 这是被装饰的基础对象。
public class SimpleCoffee implements Coffee {
@Override
public String getDescription() {
return "Simple Coffee";
}
@Override
public double getCost() {
return 5.0; // 基础咖啡价格
}
}
1.定义装饰器基类(Decorator)
这是一个抽象类,持有一个 Coffee
对象的引用,并实现 Coffee
接口。
public abstract class CoffeeDecorator implements Coffee {
protected Co
回复