适配器模式

/ 设计模式

适配器模式(Adapter)

将一个类的接口转化为另一需要的接口形式。

GoF23种设计模式中,属于结构型模式( Structural patterns)

该种模式一般是在项目维护迭代中使用,用于新功能与老代码的复用中使用,在项目开始设计中不要考虑该种模式。

类适配器可以通过继承待适配的类,不用额外的对象引用。对象适配器需要引入待适配的对象,好处是不用继承,代码简单易懂。

实现

简而言之,待适配对象经过适配器被适配成目标对象,被客户端调用。

思路

角色说明

类适配器

类适配器

类适配器代码实现

public interface Target {
    void request();
}
public class Adaptee {

    public void specificRequest(){
        System.out.println("待适配类方法");
    }
}
public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        System.out.println("开始适配");
        super.specificRequest();
        System.out.println("适配结束");
    }
}
public class Client {

    public static void main(String[] args) {
        Target adapter = new Adapter();
        adapter.request();
    }
}
开始适配
待适配类方法
适配结束

对象适配器

对象适配器

对象适配器代码实现

public class Adapter implements Target {

    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        System.out.println("开始适配");
        adaptee.specificRequest();
        System.out.println("适配结束");
    }
}

该实现方式与类适配器唯一不同之处在于,Adaper的实现,故上面仅列出了Adaper的代码。

实例

SpringAop中的AdvisorAdapter为例。

Adapter实例

角色说明

总结

如果待适配的对象是个接口,那么选择类适配器更好。

如果待适配的对象是个类,那么选择对象适配器更优。

总之,适配器模式是为了复用原来代码,提高代码利用率而采用的,在工程设计之初请不要考虑该模式。