别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(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技术栈《设计模式》系列文章陆续更新中,请大家持续关注哦!


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


相关文章
|
设计模式
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
175 0
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
|
Java 程序员 开发者
只用一行代码,你能玩出什么花样?
只用一行代码,你能玩出什么花样?
111 1
【JavaSE专栏57】妙用this和super关键字,让父类和子类之间来回自如
【JavaSE专栏57】妙用this和super关键字,让父类和子类之间来回自如
116 0
|
算法 C++
C++ 基础复习系列2(打印图形类(循环)经典问题类)
C++ 基础复习系列2(打印图形类(循环)经典问题类)
C++ 基础复习系列2(打印图形类(循环)经典问题类)
|
Java 数据库
后浪拍前浪-覆写父类方法 | 带你学《Java面向对象编程》之三十九
既然出现了继承的关系,那么就存在子类和父类的联系,而在子类之中有可能定义和父类完全相同的方法或属性的名称,这个时候就称为覆写。
后浪拍前浪-覆写父类方法   | 带你学《Java面向对象编程》之三十九
|
安全 Java 编译器
看个电影就能学会类的加载过程?我不信!
看个电影就能学会类的加载过程?我不信!
91 0
|
6月前
|
Java C++ 开发者
"深度剖析!接口VS抽象类、聚合VS组合...这6大OOP谜题,你真的全解开了吗?点击揭秘真相!"
【8月更文挑战第19天】接口与聚合是面向对象编程的关键,对于构建灵活、可扩展的软件系统至关重要。本文澄清六个常见疑惑:接口与抽象类的区别、为何使用接口、聚合与组合的不同、接口的新特性、聚合与继承的关系,以及如何合理选择接口、聚合和继承,助你深刻理解并准确应用这些核心概念。
50 0

热门文章

最新文章