Files
hyperf_test/document/decorator.md
2025-09-07 00:08:35 +08:00

52 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 装饰器模式 (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`