在工作的时候,有时候我们并不知道系统提供的对外接口会被那些系统使用。如果这个对外接口只被一个外部系统使用,问题不大,可能要提供的方法还不是很多;如果这个外部接口要被很多的外部系统使用,问题就来了,如果返回的类型不同,势必我要写比较过的方法来实现,这样便加大了代码的冗余度。有没有一种方法可以解决这个问题呢,这是我们今天要讲的设配器模式。当客户需要什么类型是,就只需要对接口的方法进行包装,从而实现自己所需要的类型。
定义:适配器模式就是将一个系统的接口转换成另一种形式,从而使原来不能直接电泳的接口变得可以调用。
组成:适配器模式主要由3部分组成:目标类、源类和适配器类
示意代码如下:
//目标类的示意代码如下
public interface Target {
void operation1();
void operation2();
}
//源类的示意代码如下
public class Adaptee {
public void operation1(){
}
public void operation2(){
}
}
//适配器类的示意代码如下
public class Adapter implements Target{
private Adaptee lnkAdaptee;
public Adapter(Adaptee lnkAdaptee){
this.lnkAdaptee = lnkAdaptee;
}
public void operation1(){
}
public void operation2() {
}
}
适配器模式分为对象适配器和类适配器,前面的代码讲的是对象适配器,即实现目标类的接口,依赖适配者类;而对于类适配器来说,要直接继承适配者类,并实现目标类的接口。
使用时机:当系统需要使用一个外部接口,而这个外部接口不符合系统需要的时候,就需要使用适配器类。
优点:使用适配器模式,可以将一个系统的接口和本来不相容的另一个系统的类联系起来,从而使得这两个类能够在一起工作,强调了对接口的转换。
缺点:对于适配器来说,不能适配一个类以及它的子类;对于对象适配器来说,重新定义被适配的类的行为比较困难。