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