适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以协同工作。
适配器模式的核心思想是创建一个适配器类,该类包装了一个已有类的接口,以满足客户端的需求。适配器类中持有一个已有类的实例,将客户端请求转发给该实例,并对请求进行适当的转换和适配。
适配器模式的关键要素包括:
- 目标接口:客户端所期望的接口,适配器类将原本不兼容的接口转换为目标接口。
- 已有类:需要被适配的类,它的接口与目标接口不兼容。
- 适配器:实现目标接口,持有已有类的实例,将客户端请求转发给已有类,并进行适当的转换和适配。
适配器模式的优点包括:
- 提供了类之间的接口转换,使得原本不兼容的类可以协同工作。
- 将适配的代码封装在适配器中,使得客户端代码与具体类解耦,提高代码的灵活性和可维护性。
下面是一个简单的适配器模式示例:
// 目标接口
interface Target {
void request();
}
// 已有类
class Adaptee {
public void specificRequest() {
System.out.println("Adaptee specificRequest");
}
}
// 适配器
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target adapter = new Adapter(adaptee);
adapter.request();
}
}
输出结果:
Adaptee specificRequest
在上述示例中,我们有一个已有类Adaptee
,它提供了一个specificRequest()
方法。我们希望将Adaptee
的接口转换为目标接口Target
。为此,我们创建了一个适配器类Adapter
,实现了目标接口Target
,并在适配器中持有了Adaptee
的实例。
在客户端代码中,我们创建了Adaptee
对象和适配器对象,将适配器对象当作目标接口使用。当客户端调用目标接口的request()
方法时,适配器将请求转发给Adaptee
对象的specificRequest()
方法。
通过适配器模式,我们可以使得原本不兼容的类协同工作,将已有类的接口转换为目标接口,使得客户端代码可以无缝地使用已有类的功能。适配器模式在系统的演进和重构中有很大的作用,可以方便地扩展和修改接口,同时保持与客户端的兼容性。