千家信息网

怎么理解web设计模式中的适配器模式

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"怎么理解web设计模式中的适配器模式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!适
千家信息网最后更新 2026年11月03日怎么理解web设计模式中的适配器模式

本篇内容介绍了"怎么理解web设计模式中的适配器模式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

适配器模式(Adapter Pattern) :将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

模式结构

适配器模式包含如下角色:

  • Target:目标抽象类

  • Adapter:适配器类

  • Adaptee:适配者类

  • Client:客户类

源码导读

我们都知道springMVC就用到了适配器模式,那他是怎么适配呢,我们来看看它的源码,首先我们要清楚springMVC的执行原理,它的整个流程我这里就不像述了,说一下关键的部分:

  1. DispatcherServlte会根据配置文件信息注册HandlerAdapter,如果在配置文件中没有配置,那么DispatcherServlte会获取HandlerAdapter的默认配置,如果是读取默认配置的话,DispatcherServlte会读取DispatcherServlte.properties文件,该文件中配置了三种HandlerAdapter:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。DispatcherServlte会将这三个HandlerAdapter对象存储到它的handlerAdapters这个集合属性中,这样就完成了HandlerAdapter的注册。

  2. DispatcherServlte会根据handlerMapping传过来的controller与已经注册好了的HandlerAdapter一一匹配,看哪一种HandlerAdapter是支持该controller类型的,如果找到了其中一种HandlerAdapter是支持传过来的controller类型,那么该HandlerAdapter会调用自己的handle方法,handle方法运用java的反射机制执行controller的具体方法来获得ModelAndView

DispatcherServlte部分源码

public class DispatcherServlet extends FrameworkServlet {    ......    ......    @Nullable    private List handlerMappings;    @Nullable    private List handlerAdapters;   protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {        HttpServletRequest processedRequest = request;        HandlerExecutionChain mappedHandler = null;        boolean multipartRequestParsed = false;        WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);        try {            try {                ModelAndView mv = null;                Object dispatchException = null;                try {                    ......                    ......                    HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());                    ......                    ......                    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());                    if (asyncManager.isConcurrentHandlingStarted()) {                        return;                    }                    this.applyDefaultViewName(processedRequest, mv);                    mappedHandler.applyPostHandle(processedRequest, response, mv);                } catch (Exception var20) {                    dispatchException = var20;                } catch (Throwable var21) {                                ......                }                        ......            } catch (Exception var22) {               ......            } catch (Throwable var23) {                     ......            }        } finally {            ......            ......        }    }}

这里只放上比较关键的代码,我们可以看到当一个请求进入doDispatch()方法的时候,它先去getHandlerAdapter()中拿到适配器,这就是第二步中根据handlerMapping中的controller找到对应适配器。找到适配器后通过ha.handle(processedRequest, response, mappedHandler.getHandler())执行我们自己的controller,mappedHandler.getHandler()就是我们自己的controller。

至于handler()如何知道该去执行controller中哪个方法,当然是通过注解去转换对应方法的。因此,这里的适配器模式还不是特别的纯粹,还结合了反射机制。DispatcherServlte属于客户端,我们的Controller属于被适配的类,HandlerAdapter属于适配器。

现在我们假定需要写一个线程池任务调度框架,我们知道JDK自带的线程框架可以创建一个线程池,但是线程池只能传入实现runnable接口或者callable接口的对象。

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();cachedThreadPool.execute(new Runnable() {    @Override     public void run() {     }})

那我们要咋样可以让客户端使用的时候无须继承runnable来使用我们的这个框架呢。你可以像springMVC一样使用适配器加注解。也可以提供一个实现Runnable接口的抽象适配器类,让客户端进行一定的配置来将普通的类适配到Runnable。

关于适配器的使用方面还有很多,比如spring security的WebSecurityConfigurerAdapter和netty中的ChannelInboundHandlerAdapter 对于适配器模式类名一般都以Adapter结尾

"怎么理解web设计模式中的适配器模式"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

适配 适配器 模式 配置 接口 方法 客户 文件 线程 客户端 对象 框架 源码 结构 设计模式 设计 关键 内容 就是 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 互联网科技工作委员会主任 中关村互联网 科技集团 科技互联网企业 智能科技公司是互联网公司吗 没上市的科技互联网公司 万易互联网科技有限公司 互联网金融监管科技 海南科技产业互联网平台 崇明区互联网教育科技诚信经营 互联网企业科技类企业如何做账 江苏苏星互联网科技有限公司 广州富喜互联网络科技 互联网科技包装股份有限公司上市 互联网科技企业商标注意事项 西安左小互联网科技有限公司 北京军民互联网科技公司 互联网科技品牌 科技互联网专业务虚会材料 科技互联网企业在行动 南京欣网互联网络科技有限公司 上海卓越科技互联网 互联网科技工作委员会 科技平台互联网 小马过河互联网科技 华中科技有哪些互联网大佬 现代科技和互联网有关系吗 受益于互联网科技的高速发展 浙江互联网科技研学营 马化腾互联网科技教学
0