适配器模式:将一个类的接口转换成客户希望的另外一个接口。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中使用的颇多,使用适配器空实现鼠标和窗口监听器的接口,之后可以单独调用相关方法。