Java适配器类有哪些

在Java中,适配器类是一种设计模式,用于解决接口之间不兼容的问题。适配器类允许不同接口之间的通信,而无需修改其原始代码。在本文中,我们将介绍一些常见的Java适配器类及其使用方法,并通过代码示例来说明其工作原理。

1. 类适配器

类适配器是一种通过继承来实现适配器的方式。适配器类继承自目标类,并实现目标接口。通过重写目标接口的方法,适配器类可以将目标接口的调用转换为源接口的调用。下面是一个类适配器的代码示例:

// 目标接口
interface Target {
    void request();
}

// 源接口
class Adaptee {
    void specificRequest() {
        System.out.println("Adaptee specific request");
    }
}

// 适配器类
class Adapter extends Adaptee implements Target {
    @Override
    public void request() {
        specificRequest();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

在上面的例子中,适配器类Adapter继承了目标类Adaptee并实现了目标接口Target。适配器类重写了目标接口的request()方法,并在方法内部调用源接口的specificRequest()方法。

2. 对象适配器

对象适配器是一种通过组合来实现适配器的方式。适配器类包含一个源接口的对象,并实现目标接口。通过调用源接口对象的方法,适配器类可以将目标接口的调用转换为源接口的调用。下面是一个对象适配器的代码示例:

// 目标接口
interface Target {
    void request();
}

// 源接口
class Adaptee {
    void specificRequest() {
        System.out.println("Adaptee specific request");
    }
}

// 适配器类
class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target = new Adapter(adaptee);
        target.request();
    }
}

在上面的例子中,适配器类Adapter包含一个源接口的对象Adaptee。适配器类实现了目标接口Target,并在request()方法中调用源接口对象的specificRequest()方法。

3. 接口适配器

接口适配器是一种通过抽象类来实现适配器的方式。适配器类继承自抽象类,并实现目标接口。抽象类中定义了目标接口的所有方法,但方法的实现为空。通过继承适配器类,可以只重写需要的方法,而不必实现所有方法。下面是一个接口适配器的代码示例:

// 目标接口
interface Target {
    void request();
    void anotherRequest();
}

// 抽象适配器类
abstract class Adapter implements Target {
    @Override
    public void request() {
        // 默认实现为空
    }

    @Override
    public void anotherRequest() {
        // 默认实现为空
    }
}

// 适配器类
class ConcreteAdapter extends Adapter {
    @Override
    public void request() {
        System.out.println("ConcreteAdapter request");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Target target = new ConcreteAdapter();
        target.request();
    }
}

在上面的例子中,抽象适配器类Adapter实现了目标接口Target的所有方法,但方法的实现为空。适配器类ConcreteAdapter继承自抽象适配器类,并重写了request()方法的实现。

总结

适配器类是