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

设计模式-装饰模式 Java

模式概述

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许向一个现有对象动态添加新功能,同时又不改变其结构。这种模式创建了一个装饰类,用于包装原有的类,提供了比继承更有弹性的替代方案。

核心思想:通过组合而非继承的方式,在运行时动态地扩展对象功能,遵循"开闭原则"(对扩展开放,对修改关闭

简单代码示例

// 1. 抽象构件
interface DataSource {void writeData(String data);String readData();
}// 2. 具体构件
class FileDataSource implements DataSource {private String filename;public FileDataSource(String filename) {this.filename = filename;}@Overridepublic void writeData(String data) {System.out.println("Writing data to file: " + data);}@Overridepublic String readData() {return "Data from file";}
}// 3. 抽象装饰类
abstract class DataSourceDecorator implements DataSource {protected DataSource wrappee;public DataSourceDecorator(DataSource source) {this.wrappee = source;}
}// 4. 具体装饰类 - 加密装饰器
class EncryptionDecorator extends DataSourceDecorator {public EncryptionDecorator(DataSource source) {super(source);}@Overridepublic void writeData(String data) {String encrypted = encrypt(data);wrappee.writeData(encrypted);}@Overridepublic String readData() {String data = wrappee.readData();return decrypt(data);}private String encrypt(String data) {return "ENCRYPTED(" + data + ")";}private String decrypt(String data) {return data.replace("ENCRYPTED(", "").replace(")", "");}
}// 5. 具体装饰类 - 压缩装饰器
class CompressionDecorator extends DataSourceDecorator {public CompressionDecorator(DataSource source) {super(source);}@Overridepublic void writeData(String data) {String compressed = compress(data);wrappee.writeData(compressed);}@Overridepublic String readData() {String data = wrappee.readData();return decompress(data);}private String compress(String data) {return "COMPRESSED[" + data + "]";}private String decompress(String data) {return data.replace("COMPRESSED[", "").replace("]", "");}
}// 客户端代码
public class DecoratorDemo {public static void main(String[] args) {// 基本文件数据源DataSource source = new FileDataSource("data.txt");// 添加加密功能DataSource encryptedSource = new EncryptionDecorator(source);encryptedSource.writeData("Sensitive data");System.out.println("Read encrypted: " + encryptedSource.readData());// 添加压缩和加密功能DataSource secureSource = new CompressionDecorator(new EncryptionDecorator(source));secureSource.writeData("Large sensitive data");System.out.println("Read compressed & encrypted: " + secureSource.readData());}
}

技术细节

1.模式组成

组件职责说明
抽象构件定义对象接口,可以动态添加职责
具体构件实现Component接口,定义要添加功能的对象
抽象装饰类继承Component,维护一个Component对象的引用
具体装饰类向构件添加具体职责

2.优缺点

优点:

  • 比继承更灵活,符合开闭原则,无需修改现有代码
  • 支持运行时动态添加或移除功能

缺点:

  • 会产生大量小对象,增加系统复杂性
  • 多层装饰时调试困难

模式应用

I/O流是装饰器模式的完美范例,它通过装饰器模式为基本的I/O操作提供了灵活而强大的扩展能力
在这里插入图片描述

http://www.dtcms.com/a/319518.html

相关文章:

  • 客户端利用MinIO对服务器数据进行同步
  • VN1 供应链销量预测建模竞赛技巧总结与分享(七)
  • 四边形面积
  • 极简 5 步:Ubuntu+RTX4090 源码编译 vLLM
  • JavaWeb03——基础标签及样式(表单)(黑马视频笔记)
  • 八、基于GD32 Embedded Builder开发GD32VW553(蓝牙广播)
  • 复杂光照场景漏检率↓76%!陌讯多模态融合算法在打电话识别的边缘部署优化
  • 使用Puppeteer轻松自动化浏览器操作
  • PYLON交叉编译:Ubuntu是x86,编译出arm64上运行的程序
  • 无人机航拍数据集|第8期 无人机海上目标检测YOLO数据集3641张yolov11/yolov8/yolov5可训练
  • 下载 | Windows Server 2016最新原版ISO映像!(集成7月更新、标准版、数据中心版、14393.8246)
  • 基于 C 语言的多态机制的驱动架构
  • 十八、k8s细粒度流量管理:服务网格
  • UiPath Studio介绍
  • CS231n2017 Assignment3 RNN、LSTM部分
  • 仁懋高压MOSFET在新能源汽车充电领域的应用
  • Java并发与数据库锁机制:悲观锁、乐观锁、隐式锁与显式锁
  • Java基础学习1(Java语言概述)
  • 音视频时间戳获取与同步原理详解
  • 如何为WordPress启用LiteSpeed缓存
  • --- Eureka 服务注册发现 ---
  • 安卓Handler和Looper的学习记录
  • 计算机视觉-OpenCV
  • GPT-5 将在周五凌晨1点正式发布,王炸模型将免费使用??
  • Android 之 Kotlin 扩展库KTX
  • 突破距离桎梏:5G 高清视频终端如何延伸无人机图传边界
  • RK3568项目(十三)--linux驱动开发之基础通讯接口(下)
  • 闪迪 SN8100 旗舰固态评测:读 14.9GB/s,写 14.0GB/s 的性能怪兽
  • 8.结构健康监测选自动化:实时数据 + 智能分析,远超人工
  • 深度学习中主要库的使用:(一)pandas,读取 excel 文件,支持主流的 .xlsx/.xls 格式