java设计模式学习笔记5 适配器模式几种实现方式

来源:互联网 发布:全局收敛的算法有 编辑:程序博客网 时间:2024/05/26 17:46

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


0 0