当前位置: 首页 > article >正文

Java设计模式之装饰者模式

装饰者模式(Decorator Pattern)是一种结构型设计模式,允许动态地向对象添加额外的职责。它通过将对象包装在装饰者类中,以提供比继承更灵活的扩展功能方式。

1. 核心角色

  • 组件接口(Component):定义被装饰对象和装饰者的共同接口。

  • 具体组件(Concrete Component):实现组件接口的基础对象。

  • 装饰者抽象类(Decorator):继承组件接口,并持有一个组件对象的引用。

  • 具体装饰者(Concrete Decorator):扩展装饰者抽象类,添加具体的装饰功能。

2. 应用场景

  • 动态扩展对象功能:在运行时添加或修改对象的行为。

  • 替代多重继承:避免因继承层次过深导致的类爆炸问题。

  • 组合功能:通过多个装饰者类灵活组合不同功能。


3. 代码示例:咖啡店订单系统

假设咖啡店销售多种饮料(如浓缩咖啡、黑咖啡),并允许添加多种调料(如牛奶、摩卡、糖)。

步骤1:定义组件接口(饮料)

步骤2:实现具体组件(基础饮料)

步骤3:定义装饰者抽象类

步骤4:实现具体装饰者(调料)

步骤5:客户端使用

输出结果

4. 装饰者模式优缺点

优点
  • 灵活扩展:动态添加功能,无需修改原有代码。

  • 避免类爆炸:通过组合替代多层继承。

  • 符合开闭原则:对扩展开放,对修改关闭。

缺点
  • 复杂性增加:系统中可能出现大量小装饰者类。

  • 调试困难:多层装饰可能导致对象链较长,不易追踪问题。


5. 装饰者模式 vs. 继承

特性装饰者模式继承
扩展方式动态组合(运行时)静态定义(编译时)
灵活性高(可任意组合装饰者)低(需预先定义子类)
类数量较多小类(每个功能一个装饰者)可能产生大量子类(组合爆炸)

6. 实际应用场景

  • Java I/O 流:如 BufferedReader 装饰 FileReader

  • GUI 组件:为窗口添加滚动条、边框等动态效果。

  • Web 中间件:为请求处理链添加日志、鉴权等功能。


http://www.kler.cn/a/586060.html

相关文章:

  • 【综述】An Introduction to Vision-Language Modeling【一】
  • upload-labs通关攻略 【Pass-01~Pass-19】
  • NPM版本管理终极指南:掌握依赖控制与最佳实践
  • 【Yonghong 企业日常问题07 】 东方通TongWeb替代Tomcat的实战指南!
  • 压力测试Monkey命令参数和报告分析!
  • 如何处理PHP中的编码问题
  • iOS底层原理系列04-并发编程
  • 【软考-架构】5.1、七层模型-局域网-TCP/IP协议
  • 鸿蒙 Next 实现线程之间的通信
  • Gemini 2.0 全面解析:技术突破、应用场景与竞争格局
  • 领先AI企业经验谈:探究AI分布式推理网络架构实践
  • 算法手记4
  • AI重构SEO关键词布局
  • LC零矩阵
  • 可复用表格组件设计与实现:分页、排序、筛选全功能解析
  • AI 游戏的创新与挑战都有哪些?
  • Dynamics 365 启用用户安全角色变更的审核功能
  • 【十五】Golang 结构体
  • Docker Compose 使用笔记
  • Leetcode 刷题笔记1 动态规划part13