适配器模式
适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。
简单来说,适配器模式就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。
通常被用在一个项目需要引用一些开源框架来一起工作的情况下,这些框架内部都有一些关于环境信息的接口,需要从外部传入,但是外部的接口不一定能匹配,在这种情况下,就需要适配器模式来转换接口。
适配器模式结构:
其中,
Target:所要转换所期待的接口。
Adaptee:需要适配的接口。
Adapter:将源接口适配成目标接口,继承源接口,实现目标接口。
Java I/O中的适配器模式
适配器的作用就是将一个接口适配到另一个接口,在Java的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。
InputStreamReader、OutputStreamWriter分别继承了Reader和Writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream的实例。InputStreamReader和OutputStreamWriter的作用也就是将InputStream和OutputStream适配到Reader和Writer。
InputStreamReader的类结构:
实现了Reader接口,并且持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char需要经过编码。
在这个过程中,适配器就是InputStreamReader类,源角色就是InputStream代表的实例对象,目标接口就是Reader类。
适配器模式和装饰器模式区别:
装饰器模式和适配器模式都有一个别名就是包装模式,他们都是起到包装一个类或对象的作用。但是他们的目的不同,适配器模式的意义试讲一个接口转变成另一个接口,他的目的之通过改变接口来达到重复使用的目的;而装饰器模式则是要保留原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方法而提升性能。