装饰器模式在 JDK 中的应用
现在我们知道如何使用装饰器模式了,现在我们再看看 JDK 哪些地方运用了装饰器模式呢。
1、IO 流
最经典的装饰器模式应用莫过于 JDK 中的 IO 流了(InputStream/ OutputStream)
常用的 InputStream 类结构类如下:
InputStream 和 FileInputStream 是基本的组件接口和实现。
FilterInputStream 就是一个实现组件接口并持有实例引用的装饰器角色:
BufferedInputStream、DataInputStream 都是不同的 FilterInputStream 的装饰实现。
OutputStream 也是同样的原理。
2、同步集合
要对非线程安全的集合(如:List、Set)简单提供线程安全的功能,使用装饰器模式也能轻松实现。
来看同步集合工具类方法:
java.util.Collections#synchronizedList(List)
java.util.Collections#synchronizedSet(Set)
它们都是 SynchronizedCollection 的装饰器实现类:
SynchronizedCollection 是装饰器角色:
SynchronizedCollection 实现了集合组件接口并持有集合实例引用,而 Collection(List) 和 ArrayList 是基本的组件接口和实现。
总结
本文介绍了装饰器模式的基本概念,也做了一个基本实战,并且举了两个 JDK 中的装饰器模式的例子,相信大家对装饰器模式有了一个基本认识了,怎么运用到项目中,大家应该有谱了吧?
当然,设计模式只是给大家一个设计的参考,并不能盲目运用,否则适得其反。话说,你是怎么在项目中应用装饰器模式的呢?欢迎留言分享案例!
本节教程所有实战源码已上传到这个仓库:
https://github.com/javastacks/javastack
好了,今天的分享就到这里了,后面栈长我会更新其他设计模式的实战文章,公众号Java技术栈第一时间推送。Java技术栈《设计模式》系列文章陆续更新中,请大家持续关注哦!
最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励