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


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


相关文章
|
4月前
|
存储 安全 编译器
C++学习过程中的一些值得注意的小点(1)
C++学习过程中的一些值得注意的小点(1)
|
4月前
|
编译器
深挖编程:揭秘隐藏基类方法的奥秘
深挖编程:揭秘隐藏基类方法的奥秘
33 3
|
Java 程序员 开发者
只用一行代码,你能玩出什么花样?
只用一行代码,你能玩出什么花样?
88 1
|
数据安全/隐私保护
都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!
都说太多if...else不好,可是有哪些优雅的处理方法,你还在写面条代码么!
72 0
|
关系型数据库 MySQL API
被无视的小细节
被无视的小细节
63 0
|
设计模式
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
138 0
别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!(1)
控制系统的动态结构图笔记(害怕自己忘了)
控制系统的动态结构图笔记(害怕自己忘了)
202 0
|
Python
又烧脑又炫技还没什么用,在代码里面打印自身
又烧脑又炫技还没什么用,在代码里面打印自身
193 0
又烧脑又炫技还没什么用,在代码里面打印自身
|
XML 架构师 Java
一文把Java反射说的明明白白,清清楚楚,记得点赞关注,距离架构师的小目标又进一步
今天有时间没加班回家来好好写一篇文章,反射是Java里比较高级的概念了,一般在书的后半部分。反射也是写框架的必备技能,反射很重要,现在仍然记得刚毕业的一两年一直没有搞懂反射是什么。今天就讲讲反射,希望这篇文章能帮有同样疑惑的你解开疑团,废话不多说,让我们开始吧。
176 0
一文把Java反射说的明明白白,清清楚楚,记得点赞关注,距离架构师的小目标又进一步