描述
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。 别名也可以是Wrapper,包装器
类结构型



主要角色
- 目标(Target)接口:可以是抽象类或接口。客户希望直接用的接口
- 适配者(Adaptee)类:隐藏的转换接口
- 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口。
代码实现
//目标接口 要适配的接口public interface MoviePlayback {String playback();}
public class AnimationMoviePlayback implements MoviePlayback{@Overridepublic String playback() {String content = "咒术回战 开播!!!";return content;}}
public class MoviePlaybackAdapter /*extends JP_Translation*/ implements MoviePlayback{//此处翻译器可以 以继承 或者组合方式 组合方式更加灵活private Translation translation;private MoviePlayback moviePlayback;public MoviePlaybackAdapter(MoviePlayback moviePlayback,Translation translation) {this.moviePlayback = moviePlayback;this.translation = translation;}@Overridepublic String playback() {String playback = moviePlayback.playback();System.out.println(playback+"第二季");translation.translation();return null;}}
public interface Translation {void translation();}
public class ZH_Translation implements Translation{@Overridepublic void translation() {System.out.println("中文翻译");}}
public class JP_Translation implements Translation{@Overridepublic void translation() {System.out.println("日文翻译开始");}}
测试
public class test {public static void main(String[] args) {MoviePlaybackAdapter moviePlaybackAdapter = new MoviePlaybackAdapter(new AnimationMoviePlayback(),new JP_Translation());moviePlaybackAdapter.playback();}}//输出结果//咒术回战 开播!!!第二季//日文翻译开始public class Adapter {public static void main(String[] args) {MoviePlaybackAdapter moviePlaybackAdapter = new MoviePlaybackAdapter(new AnimationMoviePlayback(),new ZH_Translation());moviePlaybackAdapter.playback();}}//输出结果//咒术回战 开播!!!第二季//中文翻译
使用场景
什么场景用到?
- Tomcat如何将Request流转为标准Request;
- omcat.Request接口
- servlet.Request接口
- tomcat === CoyoteAdapte === ServletRequest Spring
- AOP中的AdvisorAdapter是什么:增强的适配器
- 前置、后置、返回、结束 Advisor(通知方法)
- 底层真的目标方法
- Spring MVC中经典的HandlerAdapter是什么;
- HelloController.hello()
- HandlerAdapter
- Servlet.doGet()
- SpringBoot 中 WebMvcConfigurerAdapter为什么存在又取消
- ……
