Java设计模式_适配器模式

基础

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许接口不兼容的类能够一起工作。适配器模式通过创建一个包装类来实现这种兼容性,这个包装类包含了需要的目标接口,并持有一个适配者对象,以便进行转换。

组件

  • 目标接口(Target):定义客户端使用的特定接口。
  • 适配者类(Adaptee):存在的接口,但与目标接口不兼容。
  • 适配器类(Adapter):实现了目标接口,并持有一个适配者对象,用于执行实际的操作。

示例

老系统、新系统,适配器注入 老系统对象,且实现新系统接口重写 新系统方法同时在新方法内实际调用老系统的老方法

// 适配者类
class OldSystem {
    public void oldMethod() {
        System.out.println("Old method is called.");
    }
}

// 目标接口
interface NewSystem {
    void newMethod();
}

// 适配器类
class Adapter implements NewSystem {
    private OldSystem oldSystem;

    public Adapter(OldSystem oldSystem) {
        this.oldSystem = oldSystem;
    }

    @Override
    public void newMethod() {
        oldSystem.oldMethod();
    }
}

应用

在Spring框架中,适配器模式是一个常用的设计模式,尤其是在Web MVC和AOP(面向切面编程)模块中。以下是Spring中使用适配器模式的一些典型场景:

1. Spring MVC中的处理器适配器(HandlerAdapter)

Spring MVC使用处理器适配器(HandlerAdapter)来适配不同类型的处理器(Handler)到MVC框架。例如,SimpleControllerHandlerAdapter适配器用于处理基于Controller接口的处理器,而HttpRequestHandlerAdapter适配器则用于处理HttpRequestHandler接口的处理器。

@RequestMapping("/hello")
public class HelloWorldController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        // 处理请求逻辑
        return new ModelAndView("hello");
    }
}

2. Spring AOP中的通知适配器(AdviceAdapter)

Spring AOP使用通知适配器(AdviceAdapter)来适配不同类型的通知(Advice)到AOP框架。例如,MethodBeforeAdviceAdapter适配器用于处理前置通知,AfterReturningAdviceAdapter用于处理返回通知。

@Before("execution(* com.example.service.*.*(..))")
public void beforeMethod() {
    // 执行前置通知逻辑
}

3. 数据访问中的适配器模式

Spring的数据访问框架(如JdbcTemplate、JPA、Hibernate)也使用适配器模式来适配不同的数据源和持久化技术。

@Autowired
private JdbcTemplate jdbcTemplate;

public void saveData(Data data) {
    jdbcTemplate.update("INSERT INTO table_name (column1, column2) VALUES (?, ?)", data.getColumn1(), data.getColumn2());
}

适配器模式在Spring框架中发挥了关键作用,帮助框架整合了各种不同的接口和实现,提供了统一的访问点和接口,从而简化了开发人员的工作,提高了代码的可维护性和扩展性。

相关推荐
结衣结衣.12 分钟前
python中的函数介绍
java·c语言·开发语言·前端·笔记·python·学习
茫茫人海一粒沙15 分钟前
Python 代码编写规范
开发语言·python
原野心存15 分钟前
java基础进阶知识点汇总(1)
java·开发语言
程序猿阿伟18 分钟前
《C++高效图形用户界面(GUI)开发:探索与实践》
开发语言·c++
暗恋 懒羊羊26 分钟前
Linux 生产者消费者模型
linux·开发语言·ubuntu
五味香42 分钟前
C++学习,信号处理
android·c语言·开发语言·c++·学习·算法·信号处理
无理 Java1 小时前
【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)
java·后端·spring·面试·mvc·框架·springmvc
梓䈑1 小时前
【C语言】自定义类型:结构体
c语言·开发语言·windows
gobeyye1 小时前
spring loC&DI 详解
java·spring·rpc