java设计模式 -【装饰器模式】

装饰器模式的定义

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许向一个现有对象动态添加新功能,同时不改变其结构。它通过创建包装对象(装饰器)来包裹原始对象,并在保持原始对象方法签名的基础上扩展行为。

装饰器模式的核心组件

1. 抽象组件(Component)

定义原始对象和装饰器的共同接口,可以是抽象类或接口。

java 复制代码
public interface Component {
    void operation();
}

2. 具体组件(Concrete Component)

实现抽象组件的具体类,即需要被装饰的原始对象。

java 复制代码
public class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("原始对象的操作");
    }
}

3. 抽象装饰器(Decorator)

继承或实现抽象组件,并持有对组件对象的引用。

java 复制代码
public abstract class Decorator implements Component {
    protected Component component;
    
    public Decorator(Component component) {
        this.component = component;
    }
    
    @Override
    public void operation() {
        component.operation();
    }
}

4. 具体装饰器(Concrete Decorator)

扩展抽象装饰器,添加额外的功能。

java 复制代码
public class ConcreteDecoratorA extends Decorator {
    public ConcreteDecoratorA(Component component) {
        super(component);
    }
    
    @Override
    public void operation() {
        super.operation();
        addedBehavior();
    }
    
    private void addedBehavior() {
        System.out.println("装饰器A添加的行为");
    }
}

装饰器模式的应用场景

动态扩展功能 :在不修改代码的情况下为对象添加新功能。
替代子类继承 :避免通过子类继承导致的类爆炸问题。
组合优于继承:通过组合方式灵活扩展对象行为。

示例代码调用

java 复制代码
public class Client {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        Component decoratedA = new ConcreteDecoratorA(component);
        decoratedA.operation();
    }
}

输出结果:

css 复制代码
原始对象的操作  
装饰器A添加的行为  
相关推荐
num_killer6 小时前
小白的Langchain学习
java·python·学习·langchain
期待のcode7 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐7 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲7 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红7 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥7 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v7 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地8 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl200209258 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei8 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot