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

设计模式-装饰模式 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.xdnf.cn/news/17351.html

相关文章:

  • Web开发-JS应用WebPack构建打包Mode映射DevTool源码泄漏识别还原
  • [激光原理与应用-169]:测量仪器 - 能量型 - 光功率计(功率稳定性监测)
  • RepoCoder:仓库级代码补全的迭代检索生成框架解析与应用前沿
  • 基于Python+Vue+Mysql实现(物联网)智能大棚
  • 【tips】css模仿矢量图透明背景
  • Vue 3 入门教程 9 - 表单处理
  • change和watch
  • 酉矩阵(Unitary Matrix)和随机矩阵
  • 拥抱云原生:从传统架构到云原生架构的演进与实践
  • 慢SQL优化实战:从一例线上慢SQL探究执行引擎工作过程
  • 如何快速掌握Excel公式?14天轻松通关
  • 大疆前端笔试题目详解
  • Kafka数据生产和发送
  • 如何将Dubbo从Zookeeper平滑地迁移到Nacos?
  • OpenCV图像处理入门实战指南
  • 【办公自动化】使用Python来自动化处理Excel表格有哪些方法?
  • 急危重症专科智能体”构建新一代急诊、手术与重症中心的AI医疗方向探析
  • 图像认知与OpenCV——图像预处理4
  • Java并发与数据库锁机制:悲观锁、乐观锁、隐式锁与显式锁
  • NFS 服务器与iSCSI 服务器
  • 安卓系统属性之androidboot.xxx转换成ro.boot.xxx
  • PostgreSQL 强制索引:当重复数据让优化器“失明”时的解决方案
  • 对话访谈|盘古信息×冠捷科技:全球制造标杆的智能化密码
  • 2025 年华数杯全国大学生数学建模竞赛C 题 可调控生物节律的 LED 光源研究--完整成品、思路、模型、代码、结果分享
  • 本地组策略编辑器无法打开(gpedit.msc命令异常)
  • Windows中安装rustup-init.exe以及cargo build报错443
  • Mac 电脑安装 ADB 环境完整指南
  • 【自动驾驶】《Sparse4Dv3》代码学习笔记
  • golang的面向对象编程,struct的使用
  • DLedger(自动选举)