适配器模式
定义:将一个类的接口转换成客户希望的另外一个接口。A d a p t e r 模式使得原本
由于接口不兼容而不能一起工作的那些类可以一起工作。
解决问题:已经存在类似功能的类或接口,但是方法签名不一样。
适用性:
* 你想使用一个已经存在的类,而它的接口不符合你的需求。
* 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口
可能不一定兼容的类)协同工作。
* (仅适用于对象A d a p t e r )你想使用一些已经存在的子类,但是不可能对每一个
都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
对象适配器比较好,以及如果使用类适配器的话,我们可能只用到一个方法,这样的话我们把他继承
过来的话就相当于类污染了。
就好比我们使用常量的时候,是继承常量类还是直接引用了。如果继承过来的话就造成了常量污染。
适配器的目的是将已有类的功能提供给客户类,是一个中间者的角色。
类适配器是客户类有一个接口规范的情况下可用,此时适配类只需作为功能类的子类,并
实现接口并可,直接用功能类实现了客户类的要求。
而对象适配类是在客户类没有提供接口的情况下用的,适配类作为客户类的子类,并在其
中实例化一个功能类的对象,并调用此对象的方法实现适配,故称对象适配。
两者的区别我认为有以下几点
1.类适配器模式需要创建自身来创建一个Adaptee,
对象适配器模式可以直接使用一个已有的Adaptee的实例来转换接口。
2. 类适配器继承了Adaptee,所以可以通过覆写来扩展SpecificRequest()
对象适配器和Adaptee是包含关系不能扩展;(其实也可以扩展的见下面)
3.类适配器模式因为是继承所以相对静态,而对象适配器模式是包含是组合相对
灵活(可以通过写adaptee子类扩展功能)
那什么时候使用对象适配什么时候使用类适配呢.我想这可能而得取决于你所处理
问题所会影响到的因素吧.
两者的一些明显的区别是:类继承仅仅引入了一个新的类或接口,而无须间接引用所
适配的类的对象.要通过委托一个具体的适配类,使适配
类适配接口,因此无法适配所有的子类.这名话有点绕,那说的是什么意思呢?就是在
我们对一个类及它所有的子类进行匹配的时候,进行适配的类则总是不能胜任工作的.
但进行适配的类可以重定义(override)一些所适配的方法.而对象适配则很难.......
但是对象适配也有他自己的好处.很明显他是解耦的,他也允许进行适配的类可以与适
配类及其多个子类进行工作.