当谈到装饰器示例代码时,一个常见的示例是在已有类的基础上动态地添加额外的功能或行为。下面是一个简单的Java装饰器示例:
javaCopy code
// 定义接口或抽象类,作为装饰器和原始类的共同接口
interface Component {
void operation();
}
// 原始类,实现了共同接口
class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("执行原始操作");
}
}
// 装饰器类,实现了共同接口,并持有原始类的引用
class Decorator implements Component {
private Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operation() {
// 在原始操作前执行额外的操作
System.out.println("执行额外操作");
// 调用原始类的操作
component.operation();
// 在原始操作后执行额外的操作
System.out.println("执行其他额外操作");
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
// 创建原始对象
Component component = new ConcreteComponent();
// 对原始对象进行装饰
Component decoratedComponent = new Decorator(component);
// 调用装饰后的操作
decoratedComponent.operation();
}
}
在上述示例中,Component接口定义了一个操作方法operation(),ConcreteComponent是实现了Component接口的原始类。Decorator是装饰器类,它实现了Component接口,并在其中持有一个Component对象的引用。
装饰器类在执行操作方法时,在调用原始对象的操作前后添加了额外的操作。在示例中,额外的操作分别是输出"执行额外操作"和"执行其他额外操作"。
通过使用装饰器模式,我们可以在运行时动态地为原始对象添加功能,而无需修改原始类的代码。