Java设计模式-适配器模式和装饰模式
来源:互联网 发布:穷养儿富养女知乎 编辑:程序博客网 时间:2024/06/06 05:38
设计模式的概念:
用通用的方法去解决抽象问题的一种方式就是设计模式;
适配器模式
例如适配器模式:需求是直接处理字符,但是,输入进来的却是编码的字节。我们希望有这么一个类,能自动解码并向我们提供字符读写的接口。这个类打通了字节处理与字符处理之间的堑沟。这个类就叫做适配器类。下面是它的类图:
通过这个图,可以看到,我们期望的接口是Target类型的,这个类型定义了request这个方法。但是我们只有一个Adaptee的对象,它只能提供specificRequest,所以我们就自己做了一个适配器类Adaptor,这个类中有一个成员变量是Adaptee类型的。使用Adaptee提供的方法实现Target接口,这就是适配器做的事情。
具体体现:字节码处理InputStream ,目标接口是Reader ,提供了一个InputStreamReader
记住 InputStreamReader / OutputStreamWriter 是连通字节与字符的桥梁。XxxReader(InputStream / OutputStream / Writer) 则是连通某一类操作与输入输出流的桥梁。
装饰模式
java io 这个包里有一个类,比较特别,这就是BufferedReader。我们从JDK的源码里,找到它的实现:
public class BufferedReader extends Reader { public BufferedReader(Reader in, int sz) { super(in); if (sz <= 0) throw new IllegalArgumentException("Buffer size <= 0"); this.in = in; cb = new char[sz]; nextChar = nChars = 0; }}
可以看到,BufferedReader本身就是一个Reader,因为它继承自Reader,同时,还有一个名为 in 的成员变量,也是Reader类型的,然后还开辟了一个数组。实际上,这个数组是为了做缓存的,我们可以一次从 in 这个成员对象中读取多个字符存入 cb 中。当真正调用BufferedReader 的 read 方法的时候,就直接从 cb 中读取了,提高了读取的性能。也就是说BufferedReader所提供的 read 方法经过了 cb 这个缓存的加速,其性能会高于直接从 in 这个对象去读取。这是一种增强普通的 Reader 对象的技术。
bufferReader在对Reader做增强的时候只是对reader类做了增强,而不是针对于某一个具体的类,源码中的in这个变量可以是FileReader也可以是SocketReader,这种对于接口保持不变,又对子类的功能进行了增强,这种方式就是装饰者模式;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));则以后就可直接使用br进行读入;
- Java设计模式-适配器模式和装饰模式
- java装饰模式和适配器模式区别
- 适配器模式和装饰模式
- 再看设计模式:代理、装饰和适配器
- [转]设计模式在Java I/O中的应用(装饰模式和适配器模式)
- 代理模式,适配器模式和装饰模式'
- 设计模式学习笔记--设计模式在Java I/O中的应用(装饰模式和适配器模式)
- java数据库数据源框架原理--装饰模式和适配器模式
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- 菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同
- Java设计模式——装饰器模式、适配器模式、外观模式
- 适配器模式和装饰者模式
- 适配器模式和装饰器模式
- 适配器模式和装饰器模式
- Java 设计模式 --装饰模式
- Java 设计模式-----装饰模式
- java设计模式-装饰模式
- Numpy——将二维图像矩阵转换为一维向量
- FFmpeg+Qt实现摄像头(rtsp)实时显示
- 基于Python检索系统(4)最终版
- 二叉树结点公共祖先 <O(logn)求解>
- 在UCloud云主机上安装Python3和pip
- Java设计模式-适配器模式和装饰模式
- 石像鬼(Gargoyle)1.8.1 ar71xx SS + pdnsd 实现代理
- 一个mongodb的备份脚本
- <machine_learning>_Regression
- 视频截点上传
- CryEngine ViewMat
- 从webshell开始的内网入侵
- 海在恋服装的设计方法
- python 核心模块总结