### 装饰器模式 (Decorator Pattern) 详解 > 装饰器模式是一种结构型设计模式,它允许向一个现有的对象动态地添加新的功能,同时不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,提供了比继承更有弹性的替代方案。 #### 核心概念 装饰器模式主要解决以下问题: - 需要动态扩展一个对象的功能,而不影响其他对象 - 当继承不适合或不可行时(如需要大量子类或final类) - 需要运行时添加或撤销功能 #### 实现方式 装饰器模式通常包含以下角色: - Component(抽象组件):定义对象接口,可以动态添加职责 - ConcreteComponent(具体组件):定义具体对象 - Decorator(抽象装饰类):继承/实现Component,并持有Component引用 - ConcreteDecorator(具体装饰类):向组件添加具体职责 #### 应用场景 装饰器模式的典型应用场景包括: - GUI组件:动态添加滚动条、边框等功能 - I/O流处理:Java中的BufferedReader、ZipInputStream等 - Web开发:中间件装饰HTTP请求/响应对象 - 游戏开发:动态添加角色装备或技能 - 权限控制:动态添加权限检查 #### 优缺点 ##### 优点 - 比继承更灵活(可以在运行时添加或移除功能) - 避免子类爆炸问题 - 符合开闭原则(对扩展开放,对修改关闭) - 可以嵌套多个装饰器 ##### 缺点 - 会产生许多小对象,增加系统复杂性 - 装饰器与组件接口必须一致,限制了灵活性 - 调试困难(多层装饰时不易识别) 装饰器模式在Java标准库中有广泛应用,特别是I/O流处理部分(如BufferedInputStream装饰FileInputStream)。理解这种模式有助于编写更灵活、更易扩展的代码。 #### tips `App\Service\Test\Decorator\ContainerService` `App\Aspect\Test\Decorator\Aop\CacheableAspect`