概念:
适配器模式(Adapter)是结构型模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能再一起工作的那些类可以一起工作。适配器模式一般分为类适配和对象适配器
适用场景:
1、 已经存在的类的接口不符合我们的需求
2、 创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作
3、 在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类
对象适配器类图:
类适配器类图:
模式中的角色:
(1) 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口
(2) 需要适配的类(Adaptee):需要适配的类
(3) 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口
类适配器和对象适配器的主要区别:
类适配中Adapter继承于Adaptee,而对象适配器是持有一个Adaptee的引用。
对于JAVA这种只支持单继承的语言来说,类适配器具有很大的局限性,TARGET对象必须为接口。但是类适配器模式中Adapter是Adaptee的子类,使得Adapter可以很方便的更改Adaptee的方法,灵活性较好
优缺点
优点
(1) 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的,这样做更简单、直接、更紧凑。
(2) 复用了现存的类,解决了现存类和复用环境要求不一致的问题
(3) 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码
(4) 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口
缺点:
(1) 对于对象适配器来说,更换适配器的实现过程比较复杂
适配器模式和代理模式非常相似,但是区别也很明显。代理模式中代理者和被代理者的需要实现相同的接口,只是客户端无法访问到被代理者,所以利用代理来间接地访问。而适配器模式,是因为接口不同,为了让用户使用同一个接口,把原先的对象通过适配器让用户统一地使用。
我的工作主要是在Android平台上开发TV模块,在Android5.0之前是没有TV模块的,但是即使Android5.0之后Google增加TIF框架,增加TV相关的接口但是各家芯片厂商并没有那么快的去实现这些接口,而是各家都有自己的TV API,我们就需要定义我们自己的接口,让上层应用只需要关注一个接口就可以而不需要去考虑平台性。而我就是学习各家芯片厂商和各家方案厂商的API,并实现我们自己的API,这其实就是适配的过程。