适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,起到一种适配的作用。
适配器模式的构成:
---目标抽象角色(Target):定义用户需要的特定领域的接口,(用户可以调用的类)
---适配器(Adapter):调用另一接口,作为一个转换器(起到适配的作用,实现Target接口)
---适配器(Adaptee): 定义一个接口,Adapter需要接入(用户最终需要使用的类,类型不匹配,通过Adapter转成我们可以使用的类型即Target)
适配器模式是java中使用广泛的使用模式,有三种实现方式
1,类适配器(采用继承方式)
2,对象适配器(采用对象组合的方式)推荐使用
3,缺省的适配器模式
一、类适配器(继承方式)
编写Taget
/**
* Created by charleszhu on 14-2-15.
* 目标抽象角色
*/
public interface Target {
public void method();
}
编写需要使用的Adaptee类
/**
* Created by charleszhu on 14-2-15.
*/
public class Adaptee {
public void realMethod(){ //最终想要调用的方法
System.out.println("realMethod invoked!!!");
}
}
使用继承的方式编写适配器Adapter
/**
* Created by charleszhu on 14-2-15.
*/
public class Adapter extends Adaptee implements Target {
@Override
public void method() {
// 因为继承了Adaptee,所以可以用this指向Adaptee对象
this.realMethod();
}
}
最终便实现了利用Target的method调用realMethod方法
编写测试的Client类
/**
* Created by charleszhu on 14-2-15.
*/
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.method();
}
}
打印结果必然是:realMethod invoked!!!
二、使用对象组合方式
其余实现都是一样的,知识Adapter的不用在继承Adaptee,而是将Adaptee当做他的成员变量之一,通过Adapter的变量进行传参
/**
* Created by charleszhu on 14-2-15.
*/
public class Adapter1 implements Target{
private Adaptee adaptee;
public Adapter1(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void method() {
adaptee.realMethod();
}
}
只需在测试类的时候传一个new Adaptee()即可;
三、缺省的适配器模式
在awt,swing中使用的颇多,使用适配器空实现鼠标和窗口监听器的接口,之后可以单独调用相关方法。