|
|
适配器与缺省适配器(Adapter and default adapter)
适配器把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器有两种形式,;类的适配器和对象的适配器。
两者的区别在于,类的适配器用继承实现,对象的适配器用委派关系实现。
类的适配器
涉及角色有
目标(Target)角色:目标角色是所期待的接口。由一个接口扮演
源角色(Adaptee)角色:现有的接口。将被适配到Target上去。
适配器(Adapter)角色:将源接口转换到目标接口上去。由一个具体类扮演
类Adapter的定义方法:
public class Adapter extends Adaptee implements Target
{
/*
ommitted
*/
}
Adapter在继承Adaptee后,补足一些未实现的功能,或者override一些方法,从而实现Target接口
类适配器总结:
1)源的子类无法和源使用同一个适配器
2)实现时可以override源的方法
对象适配器
涉及角色有
目标(Target)角色:目标角色是所期待的接口。由一个接口扮演,也可以是一个抽象/具体类
源角色(Adaptee)角色:现有的接口。将被适配到Target上去。
适配器(Adapter)角色:将源接口转换到目标接口上去。由一个具体类扮演
对象Adapter的定义方法
public class Adapter implements Target
// Or public class Adapter extends Target
{
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
/*
*/
}
/*
ommitted
*/
}
对象适配器总结:
1)源类和源类的子类都可以通过同一个适配器适配到同一个目标。
2)不太容易置换源类的方法
3)易于增加新的方法
使用适配器的情况
1)系统需要使用现有的类, 而此类的接口不符合系统的需要。
2)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,
包括一些可能在将来引进的类一起工作。而源类不需要设计一些复杂的接口。
3)(对对象适配器而言) 需要改变多个已有的子类的接口。
缺省适配是适配器模式的一个特例
很多情况下,必须让一个具体类实现一个接口。但是这个类又用不到接口所规定的所有方法
,通常的处理方法是,对于其他方法提供一个空的实现。
缺省适配器是对一个抽象的适配器,对于给定接口的所有方法都提供了空的实现。具体的类从抽象
适配器类继承,按自己的需要覆盖空的实现。
缺省适配器使得一个实现接口的类只关注自己需要的那部分接口。缺省适配器类应该被声明为
抽象的,阻止被客户端实例化。 |
|