装饰器模式是一种结构型设计模式,它允许你在不修改原始类代码的情况下,通过使用包装对象来动态地向原始对象添加新的行为,这种模式通常用于在运行时根据不同的条件或需求来改变对象的行为。
装饰器模式的核心思想是将对象的创建、配置和使用分离开来,使得它们可以独立地变化,这使得我们可以在不影响其他部分的情况下,轻松地替换或添加新的功能。
在Java中,装饰器模式可以通过实现一个装饰器接口或者继承一个装饰器基类来实现,以下是一个简单的示例:
// 定义一个接口 interface Component { void operation(); } // 实现接口的具体类 class ConcreteComponent implements Component { @Override public void operation() { System.out.println("具体组件的操作"); } } // 定义一个抽象装饰器类,它也实现了Component接口 abstract class Decorator implements Component { protected Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } } // 具体装饰器类A,它继承了Decorator类 class ConcreteDecoratorA extends Decorator { public ConcreteDecoratorA(Component component) { super(component); } @Override public void operation() { System.out.println("装饰器A的操作"); super.operation(); } } // 具体装饰器类B,它也继承了Decorator类 class ConcreteDecoratorB extends Decorator { public ConcreteDecoratorB(Component component) { super(component); } @Override public void operation() { System.out.println("装饰器B的操作"); super.operation(); } }
在上述代码中,ConcreteComponent
是具体组件,ConcreteDecoratorA
和ConcreteDecoratorB
分别是具体的装饰器A和B,当我们调用operation()
方法时,会先执行当前对象的operation()
方法,然后再执行装饰器的operation()
方法,这就是装饰器模式的工作方式。