1. Decorator 模式作为组合的动态扩展(Java IO 流、JS HOC)
装饰器(Decorator)模式如何作为组合的动态扩展?举 Java IO 流与 JS HOC 的例子?
- Decorator 模式的结构
- 动态扩展能力
- Java IO 与 JS HOC 实例
装饰器(Decorator)模式通过组合动态地为对象添加职责:装饰器持有被装饰对象的引用,实现相同接口,在调用时先/后增强行为。它不修改原对象、不改变接口,可在运行时按需组合——这是"组合优于继承"的典型:继承是静态的(编译期固定),装饰器是动态的(运行时叠加)。Java IO 流是经典实例:new BufferedInputStream(new FileInputStream(f)) 层层包装,Buffer 装饰器为文件流加缓冲,不改变 InputStream 接口。JS 的 HOC(Higher-Order Component)也是:withAuth(withLogging(Component)) 用函数组合包装组件,为组件动态加认证、日志能力。
装饰器把"扩展"从继承的多层子类改为"组合的层层包装",灵活且避免类爆炸。它让职责可自由叠加、可复用,且符合 OCP(新增装饰器即扩展)。是"组合优于继承"最直观的模式。