下面是一个使用Java实现的装饰模式的示例:
```java
// 定义抽象组件
interface Component {
void operation();
}
// 具体组件
class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("执行具体组件的操作");
}
}
// 抽象装饰器
abstract class Decorator implements Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operation() {
component.operation();
}
}
// 具体装饰器
class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
System.out.println("执行具体装饰器A的操作");
}
}
class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
System.out.println("执行具体装饰器B的操作");
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Component component = new ConcreteComponent(); // 创建具体组件
component.operation(); // 执行具体组件的操作
Component decoratedComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponent())); // 创建装饰后的对象
decoratedComponent.operation(); // 执行装饰后对象的操作
}
}
```
这个示例中,抽象组件(`Component`)定义了组件的操作。具体组件(`ConcreteComponent`)是被装饰的对象。抽象装饰器(`Decorator`)实现了抽象组件接口,并维护一个指向具体组件的引用。具体装饰器(`ConcreteDecoratorA`和`ConcreteDecoratorB`)继承自抽象装饰器,对组件进行装饰并添加额外的功能。
装饰模式是作用于对象层次的设计模式。它允许在运行时动态地向对象添加功能,而无需修改现有的类结构。通过逐层嵌套装饰器,可以给对象添加多个不同的装饰组件,实现更灵活的功能组合。装饰模式支持开放-封闭原则,因为它允许在不修改现有代码的情况下添加新功能。