适配器模式

描述

  • 结构型设计模式
  • 统一规范
  • 它主要是为了解决已经存在的类不符合我们的要求,从而使用适配器让不兼容的类能够在一起工作

案例

SpringMVC中的HandlerAdapter
  1. DispatcherServlet收到请求后,先从HandlerMapping中获取可以处理该请求的handler,而handler有多种类型

  2. HandlerMethod、HandlerFunction、HttpRequestHandler等这些Handler并没有统一的规范(类型不一样,没有实现统一的接口或继承统一的类,处理请求的方法也不同)。在DispatcherServlet中如果直接与这些Hanlder交互,调用方式是不确定的,将会产生大量if-else分支,扩展增加Handler时还需要修改代码,这也违反了开闭原则。

  3. 采用适配器模式 ,定义一个接口HandlerAdapter作为统一规范 ,然后为每个handler创建一个适配器,所有的适配器都实现该接口,在每个适配器内部触发对应的Handler的方法,这样DispatcherServlet只需要和拥有统一规范的适配器交互即可

  4. 适配器将不同类型的处理器适配到DispathcherServlet的处理流程中。

    org.springframework.web.servlet.DispatcherServlet#doDispatch

    RequestMappingHandlerAdapter适配器,实现了HandlerAdapter接口,用于处理HandlerMethod这个handler(HandlerMethod对应的是@Controller+@RequestMapping标注的方法)

openfeign从响应中解码
复制代码
org.springframework.cloud.openfeign.support.SpringDecoder#decode
--> org.springframework.web.client.HttpMessageConverterExtractor#extractData

从不同的响应中抽取数据。由于extractData方法要求的类型是ClientHttpResponse,而feign.Response并不符合,使用适配器FeignResponseAdapter可让extractData方法从feign.Response中抽取数据

相关推荐
JAVA坚守者4 天前
Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践
适配器模式·并发编程·jvm 调优·javacc·熔断机制·java 性能优化·jmh 测试
wjm04100614 天前
C++八股--5--设计模式--适配器模式,代理模式,观察者模式
c++·设计模式·适配器模式
催眠大树14 天前
适配器模式(Adapter Pattern)
java·开发语言·适配器模式
帝锦_li16 天前
Java进阶--设计模式
观察者模式·单例模式·代理模式·抽象工厂模式·适配器模式·原型模式
星星点点洲22 天前
【设计模式区别】装饰器模式和适配器模式区别
设计模式·适配器模式·装饰器模式
?abc!22 天前
设计模式基础概念(结构型模式):适配器模式(Adapter Pattern)
python·设计模式·适配器模式
碎梦归途24 天前
23种设计模式-结构型模式之适配器模式(Java版本)
java·开发语言·jvm·单例模式·设计模式·适配器模式
不当菜虚困1 个月前
JAVA设计模式——(1)适配器模式
java·设计模式·适配器模式
十五年专注C++开发1 个月前
面试题:C++11在C++98基础上增加了哪些内容?
开发语言·c++·设计模式·面试·stl·适配器模式
编程侦探1 个月前
【设计模式】适配器模式:让不兼容的接口和谐共处
开发语言·c++·设计模式·适配器模式