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()
方法的实现。
总结
适配器类是