一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
例如给手机充电,不能直接用220V电流,手机充电插头就是一个适配器,或者到国外去出差,国外电源不同于国内电源,找前台要一个适配器转换成220V电流再插上手机充电插头进行充电。
作用:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。
spring中的适配器模式
HandlerAdapter
DispatcherServlet中的doDispatch方法,通过HandlerAdapter将请求分发到具体的controller。
public interface HandlerAdapter {
boolean supports(Object handler);
@Nullable
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
long getLastModified(HttpServletRequest request, Object handler);
}
HandlerAdapter
的实现类有
- HttpRequestHandlerAdapter (org.springframework.web.servlet.mvc)
- SimpleServletHandlerAdapter (org.springframework.web.servlet.handler)
- HandlerFunctionAdapter (org.springframework.web.servlet.function.support)
- CompositeHandlerAdapter (org.springframework.boot.actuate.autoconfigure.web.servlet)
- AbstractHandlerMethodAdapter (org.springframework.web.servlet.mvc.method)
- SimpleControllerHandlerAdapter (org.springframework.web.servlet.mvc)
spring定义了一个适配器接口,使得每一种Controller有一种对应的适配器实现类,让适配器代替controller执行相应的方法。这样在扩展Controller 时,只需要增加一个适配器类就完成了SpringMVC的扩展了。
WebMvcConfigurerAdapter
WebMvcConfigurerAdapter
实现了接口WebMvcConfigurer
,是spring的核心配置类,在之前的版本通常继续此类进行项目配置。此适配器默认实现了接口的方法,在使用的时候只需关心需要的配置,重写方法即可。在java8之后接口有了默认实现,抽象接口的空实现适配器方式也就是失去了其作用,直接实现接口,只关心需要的方法重写,不需要的方法走接口的默认实现。