适配器模式(Adapter Pattern):把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
类适配器模式结构与角色:
目标(Target)角色:这就是所期待得到的接口。注意,由于这里讨论的是类适配器模式,因此目标不可以是类。
源(Adaptee)角色:现有需要适配的接口。
适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色必须是实现类。
类适配器模式的效果:
1、 源的子类无法使用此类适配。
2、 由于适配器类是源的子类,因此可以在适配器类中置换掉(Override)源的一些方法。
3、 由于只引进一个适配器类,因此只有一个路线到达目的类,是问题得到简化。
对象适配器模式结构与角色:
目标(Target)角色:这就是所期待得到的接口,目标可以是具体的或抽象的类。
源(Adaptee)角色:现有需要适配的接口。
适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色必须是实现类。
对象适配器模式的效果:
1、 一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。
2、 与类适配器模式相比,要想置换源类的方法就不容易。如果一定要置换掉源类的一个或多个方法,就只好先做一个源类的子类,将猿类的方法置换掉,然后再把源类的子类当做真正的源进行适配。
3、 虽然想要置换源类的方法不容易,但是要想增加一些新的方法则方便的很,而且新增加的方法可以同时适用于所有的源。
使用适配器模式的情况:
1、 系统需要使用现有的泪,而此类的接口不符合系统的需要。
2、 想要建立一个可以重复使用的类,用于与一个彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源不一定有很复杂的接口。
3、 (对对象适配器模式而言)在设计里,需要改变多个已有的子类的接口,如果使用类适配器模式,就要针对每一个子类做一个适配器类,而这不太实际。
适配器类实现时的注意:
1、 目标接口可以省略。此时目标接口和源接口实际上是相同的。
2、 适配器类可以是抽象类。
带参数的适配器模式。使用这种方法,适配器类可以根据参数返回一个合适的实例给客户端。