您好,登录后才能下订单哦!
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行协作。适配器模式通过将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。
适配器模式通常在以下场景中使用:
适配器模式主要有两种实现方式:类适配器模式和对象适配器模式。
类适配器模式通过继承来实现适配器。适配器类继承自目标类,并实现适配者接口。这样,适配器类既可以调用目标类的方法,也可以调用适配者类的方法。
classDiagram
class Target {
+request()
}
class Adaptee {
+specificRequest()
}
class Adapter {
+request()
}
Target <|-- Adapter
Adaptee <|-- Adapter
// 目标接口
interface Target {
void request();
}
// 适配者类
class Adaptee {
public void specificRequest() {
System.out.println("Adaptee's 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();
}
}
对象适配器模式通过组合来实现适配器。适配器类持有适配者类的实例,并实现目标接口。这样,适配器类可以通过调用适配者类的方法来实现目标接口的功能。
classDiagram
class Target {
+request()
}
class Adaptee {
+specificRequest()
}
class Adapter {
-adaptee: Adaptee
+request()
}
Target <|-- Adapter
Adapter --> Adaptee
// 目标接口
interface Target {
void request();
}
// 适配者类
class Adaptee {
public void specificRequest() {
System.out.println("Adaptee's 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();
}
}
双向适配器是一种特殊的适配器,它既可以作为目标接口的适配器,也可以作为适配者接口的适配器。双向适配器通常用于需要双向转换的场景。
classDiagram
class Target {
+request()
}
class Adaptee {
+specificRequest()
}
class Adapter {
-target: Target
-adaptee: Adaptee
+request()
+specificRequest()
}
Target <|-- Adapter
Adaptee <|-- Adapter
// 目标接口
interface Target {
void request();
}
// 适配者接口
interface Adaptee {
void specificRequest();
}
// 适配器类
class Adapter implements Target, Adaptee {
private Target target;
private Adaptee adaptee;
public Adapter(Target target, Adaptee adaptee) {
this.target = target;
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
@Override
public void specificRequest() {
target.request();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Target target = new Target() {
@Override
public void request() {
System.out.println("Target's request");
}
};
Adaptee adaptee = new Adaptee() {
@Override
public void specificRequest() {
System.out.println("Adaptee's specific request");
}
};
Adapter adapter = new Adapter(target, adaptee);
adapter.request();
adapter.specificRequest();
}
}
缺省适配器是一种特殊的适配器,它为适配者接口提供了一个默认的实现。缺省适配器通常用于需要为接口提供默认实现的场景。
classDiagram
class Target {
+request()
}
class DefaultAdapter {
+request()
}
class Adaptee {
+specificRequest()
}
Target <|-- DefaultAdapter
DefaultAdapter <|-- Adapter
Adaptee <|-- Adapter
// 目标接口
interface Target {
void request();
}
// 缺省适配器类
class DefaultAdapter implements Target {
@Override
public void request() {
System.out.println("DefaultAdapter's request");
}
}
// 适配者类
class Adaptee {
public void specificRequest() {
System.out.println("Adaptee's specific request");
}
}
// 适配器类
class Adapter extends DefaultAdapter {
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();
}
}
在Java中,适配器模式被广泛应用于各种场景。例如,Java的InputStreamReader
和OutputStreamWriter
就是适配器模式的典型应用。
InputStreamReader
和OutputStreamWriter
的适配器模式InputStreamReader
和OutputStreamWriter
是Java I/O库中的两个类,它们分别将字节流适配为字符流。
// 使用InputStreamReader将字节流适配为字符流
InputStream inputStream = new FileInputStream("file.txt");
Reader reader = new InputStreamReader(inputStream);
// 使用OutputStreamWriter将字符流适配为字节流
OutputStream outputStream = new FileOutputStream("file.txt");
Writer writer = new OutputStreamWriter(outputStream);
在Spring框架中,适配器模式也被广泛应用。例如,Spring MVC中的HandlerAdapter
就是适配器模式的典型应用。
HandlerAdapter
的适配器模式HandlerAdapter
是Spring MVC中的一个接口,它用于将不同类型的处理器适配为统一的处理接口。
// HandlerAdapter接口
public interface HandlerAdapter {
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
long getLastModified(HttpServletRequest request, Object handler);
}
// 具体的HandlerAdapter实现
public class SimpleControllerHandlerAdapter implements HandlerAdapter {
@Override
public boolean supports(Object handler) {
return (handler instanceof Controller);
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return ((Controller) handler).handleRequest(request, response);
}
@Override
public long getLastModified(HttpServletRequest request, Object handler) {
if (handler instanceof LastModified) {
return ((LastModified) handler).getLastModified(request);
}
return -1L;
}
}
适配器模式是一种非常有用的设计模式,它可以帮助我们在不修改现有代码的情况下,将不兼容的接口转换为兼容的接口。适配器模式主要有两种实现方式:类适配器模式和对象适配器模式。此外,适配器模式还可以扩展为双向适配器和缺省适配器,以满足不同的需求。
在实际开发中,适配器模式被广泛应用于各种场景,例如Java I/O库中的InputStreamReader
和OutputStreamWriter
,以及Spring MVC中的HandlerAdapter
。通过理解和掌握适配器模式,我们可以更好地设计和实现灵活、可扩展的系统。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。