• 一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,适配器模式分为类结构型模式(继承)和对象结构型模式(组合)两种,前者(继承)类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
  • 别名也可以是Wrapper,包装器
  • 适配器模式(Adapter)包含以下主要角色
    • 目标(Target)接口:可以是抽象类或接口。客户希望直接用的接口
    • 适配者(Adaptee)类:隐藏的转换接口
    • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口。
  1. /**
  2. * 目标接口
  3. */
  4. public class MoviePlayer implements Player {
  5. @Override
  6. public String play() {
  7. System.out.println("正在播放:宋老师的宝贵时间.avi");
  8. String content = "你好";
  9. System.out.println(content); //并且打印出字幕
  10. return content;
  11. }
  12. }
  1. /**
  2. * 设配器
  3. */
  4. public class JPMoviePlayerAdapter implements Player {
  5. //组合的方式
  6. private Translator translator = new Zh_JPTranslator();
  7. private Player target;//被适配对象
  8. public JPMoviePlayerAdapter(Player target) {
  9. this.target = target;
  10. }
  11. @Override
  12. public String play() {
  13. String play = target.play();
  14. //转换字幕
  15. String translate = translator.translate(play);
  16. System.out.println("日文:" + translate);
  17. return play;
  18. }
  19. }
  1. /**
  2. * 适配者
  3. */
  4. public class Zh_JPTranslator implements Translator{
  5. @Override
  6. public String translate(String content) {
  7. if("你好".equals(content)){
  8. return "空尼几哇";
  9. }
  10. if ("什么".equals(content)){
  11. return "纳尼";
  12. }
  13. return "*******";
  14. }
  15. }

image.png

应用场景

  • Tomcat如何将Request流转为标准Request;
    • tomcat.Request接口
    • servlet.Request接口
    • tomcat === CoyoteAdapte === ServletRequest
  • Spring AOP中的AdvisorAdapter是什么:增强的适配器
    • 前置、后置、返回、结束 Advisor(通知方法)
    • 底层真的目标方法
  • Spring MVC中经典的HandlerAdapter是什么;
    • HelloController.hello()
    • HandlerAdapter
    • Servlet.doGet()
  • SpringBoot 中 WebMvcConfigurerAdapter为什么存在又取消