首页/开发/代码质量与评审速查/装饰器模式 Decorator(结构型)
设计原则与模式62 条

装饰器模式 Decorator(结构型)

在不改变接口的前提下为对象叠加行为:层层包装(如流处理、压缩、加密、缓存)可自由组合;相比继承,组合方式在运行期决定。

意图动态叠加职责,接口不变
形态同一接口 + 持有被装饰对象
实例Java IO 管道、HTTP 中间件链

Java 示例

Java 示例
InputStream in = new BufferedInputStream(
    new GZIPInputStream(
        new FileInputStream(path)));
中间件/装饰链的执行顺序即包装顺序:排查问题先确认层序。

易错点

  • 层数过多:一次调用穿过十几层,调试与性能都受损
  • 装饰器假设被包装对象的身份:与代理语义混淆

数据来源与参考

  • 《设计模式》(GoF)· Decorator
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌