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框架中发挥了关键作用,帮助框架整合了各种不同的接口和实现,提供了统一的访问点和接口,从而简化了开发人员的工作,提高了代码的可维护性和扩展性。

相关推荐
先知后行。29 分钟前
QT实现计算器
开发语言·qt
掘根30 分钟前
【Qt】常用控件3——显示类控件
开发语言·数据库·qt
GUIQU.36 分钟前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
西阳未落4 小时前
C++基础(21)——内存管理
开发语言·c++·面试
我的xiaodoujiao5 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
callJJ5 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
wangjialelele5 小时前
Linux中的线程
java·linux·jvm·c++
谷咕咕5 小时前
windows下python3,LLaMA-Factory部署以及微调大模型,ollama运行对话,开放api,java,springboot项目调用
java·windows·语言模型·llama
没有bug.的程序员5 小时前
MVCC(多版本并发控制):InnoDB 高并发的核心技术
java·大数据·数据库·mysql·mvcc
在下村刘湘6 小时前
maven pom文件中<dependencyManagement><dependencies><dependency> 三者的区别
java·maven