别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(2)

简介: 别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(2)

装饰器模式在 JDK 中的应用

现在我们知道如何使用装饰器模式了,现在我们再看看 JDK 哪些地方运用了装饰器模式呢。


1、IO 流

最经典的装饰器模式应用莫过于 JDK 中的 IO 流了(InputStream/ OutputStream)


常用的 InputStream 类结构类如下:


image.png

InputStream 和 FileInputStream 是基本的组件接口和实现。


FilterInputStream 就是一个实现组件接口并持有实例引用的装饰器角色:

image.png

BufferedInputStream、DataInputStream 都是不同的 FilterInputStream 的装饰实现。


OutputStream 也是同样的原理。


2、同步集合

要对非线程安全的集合(如:List、Set)简单提供线程安全的功能,使用装饰器模式也能轻松实现。


来看同步集合工具类方法:


java.util.Collections#synchronizedList(List)


java.util.Collections#synchronizedSet(Set)

image.png

它们都是 SynchronizedCollection 的装饰器实现类:

image.png

SynchronizedCollection 是装饰器角色:

image.png

SynchronizedCollection 实现了集合组件接口并持有集合实例引用,而 Collection(List) 和 ArrayList 是基本的组件接口和实现。


总结

本文介绍了装饰器模式的基本概念,也做了一个基本实战,并且举了两个 JDK 中的装饰器模式的例子,相信大家对装饰器模式有了一个基本认识了,怎么运用到项目中,大家应该有谱了吧?


当然,设计模式只是给大家一个设计的参考,并不能盲目运用,否则适得其反。话说,你是怎么在项目中应用装饰器模式的呢?欢迎留言分享案例!


本节教程所有实战源码已上传到这个仓库:


https://github.com/javastacks/javastack


好了,今天的分享就到这里了,后面栈长我会更新其他设计模式的实战文章,公众号Java技术栈第一时间推送。Java技术栈《设计模式》系列文章陆续更新中,请大家持续关注哦!


最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励


相关文章
|
PHP 数据库
fastadmin框架如何查询数据表指定时间段内的数据
fastadmin框架如何查询数据表指定时间段内的数据
1081 0
|
人工智能 自然语言处理 搜索推荐
告别加班!用DeepSeek搭建全自动爆款图文工厂
随着人工智能技术的飞速发展,图文创作迎来了革命性飞跃。DeepSeek作为强大的AI工具,可批量生成高质量图文笔记,精准适配小红书、抖音、B站等平台。通过明确选题、撰写提示词,用户能轻松定制内容风格,涵盖字体、背景、颜色等多方面细节。从注册登录到生成HTML代码,再到优化处理图片,DeepSeek为创作者提供了全流程支持,助力打造爆款内容。无论是分析爆款笔记还是二次创作,DeepSeek都能大幅提升效率,引领潮流风向标。
762 25
|
分布式计算 运维 大数据
MaxCompute,原名ODPS,是阿里云提供的一种大数据计算服务
MaxCompute,原名ODPS,是阿里云提供的一种大数据计算服务
721 1
|
机器学习/深度学习 数据采集
《机器学习模型快速收敛的秘籍大揭秘》
在机器学习中,快速收敛是提高效率和节省资源的关键。常用方法包括:选择合适的优化器(如Adam、RMSProp等),动态调整学习率,使用预训练模型,进行数据预处理,合理选择模型结构,应用批量归一化,以及增加训练数据。这些策略能有效加速模型收敛,提升性能并减少训练时间。
770 7
|
机器学习/深度学习 算法
如何在SVM中应用核函数
如何在SVM中应用核函数
598 17
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
965 3
ly~
|
缓存 监控 编译器
如何优化 SDL 图形库在不同系统中的性能
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,用于优化不同系统中的图形库性能。在银河麒麟系统中,通过SDL渲染模式提升视频监控客户端性能,支持更多播放路数。优化方法包括:1) 图像加载时使用SDL_ConvertSurface转换图像格式,避免内存中存在多份拷贝;2) 在VSCode下配置SDL时,合理设置编译器选项和项目架构,减少API调用带来的性能开销;3) 使用SDL库在景嘉微7200显卡上优化渲染性能,提高播放路数。综合考虑图像加载优化、系统特性利用及硬件兼容性,以实现最佳性能。
ly~
1093 6
|
机器学习/深度学习 人工智能 供应链
5G技术是第五代移动通信技术
5G技术是第五代移动通信技术
1324 7
|
存储 JavaScript Java
若依修改,如何安装wangEditor,图片上传接口编写。建议暴露专门写一个图片存储的接口
若依修改,如何安装wangEditor,图片上传接口编写。建议暴露专门写一个图片存储的接口
若依修改,如何安装wangEditor,图片上传接口编写。建议暴露专门写一个图片存储的接口