本文首发于个人我的博客,谈谈适配器模式 ,欢迎访问!设计模式
适配器模式 (Adapter Pattern):将一个接口转换成客户但愿的另外一个接口,使接口不兼容的那些类能够一块儿工做,其别名为包装器 (Wrapper)。适配器模式既能够做为类结构型模式,也能够做为对象结构型模式。app
设计模式的目的自己应该是使得软件设计更具合理性,松耦合,易于扩展。咱们在学习的过程当中,不管是书上仍是博客上,通常都会描述模式的定义、UML 图以及基本的实现方式。可是在我看来,在模式的实现和运用上彷佛并不须要彻底按照模式自己的结构来。学习
在 SpringMVC 中适配器模式主要用于执行目标 Controller 中的请求处理方法。编码
看了一些资料,在这里感受使用 Adapter 的目的,无非是减小 if 的使用,而且减小大量的请求处理代码和 DispatcherServlet 以前的耦合。由于不一样的 Handler 有不一样名称的请求处理方法,若是不使用统一接口的 Adapter,势必会添加一些硬编码的类型判断(Controller 和 Servlet 都是 Handler 的一种)。所以封装一系列的 Adapter 与各个类型的 Handler 对应,在 DispatcherServlet 中就能够直接经过 Handler 寻找合适的 Adapter。固然,Adapter 列表会在 Bean 初始化的过程当中预先加载好,因此本质上仍是遍历匹配类型,可是在写法和设计上和直接使用一组 I if 语句判断有必定的区别。spa
在 JPA 中也是如此, JpaVendorAdapter 就是一个适配器,不一样的 JPA 提供者须要去实现不一样的 Adapter。实际上就是一个标准化的过程,这两个例子所表现的都是一致的。虽然有不少的处理者,可是都有统一的方法接入。例如,HandlerAdapter 的 handle() 方法。最典型的插座的例子也是,不管输入的电压是 220v 仍是 110v,但我最终须要的就是 5v,这个就须要适配器来进行转换。.net
设计模式就比如张三丰手里的太极剑,不拘泥于招式,用意不用力,在往后开发过程当中还需慢慢体会。设计