java设计模式之装饰器模式

49 阅读1分钟

当谈到装饰器示例代码时,一个常见的示例是在已有类的基础上动态地添加额外的功能或行为。下面是一个简单的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对象的引用。

装饰器类在执行操作方法时,在调用原始对象的操作前后添加了额外的操作。在示例中,额外的操作分别是输出"执行额外操作"和"执行其他额外操作"。

通过使用装饰器模式,我们可以在运行时动态地为原始对象添加功能,而无需修改原始类的代码。