0%

设计模式之结构型模式(一):适配器模式

1. 适配器模式概述

  • 概念

    • 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作那些类能一起工作
    • 适配器模式适用于有相关性但不兼容的结构源接口通过一个中间件转换后才可以适用于目标接口,这个转换过程就是适配,这个中间件就称之为适配器
  • 特点

    • 适配器模式并不推荐多用。因为未雨绸缪好过亡羊补牢,如果事先能预防接口不同的问题,不匹配问题就不会发生 ,只有遇到源接口无法改变时,才应该考虑使用适配器
    • 适配器模式就像是一个补丁,只有在遇到接口无法修改时才应该考虑适配器模式。如果接口可以修改,那么将接口改为一致的方式会让程序结构更加良好
  • Demo

    • 家庭电源提供 220V 的电压

      1
      2
      3
      4
      5
      6
      class HomeBattery {
      int supply() {
      // 家用电源提供一个 220V 的输出电压
      return 220;
      }
      }
    • USB 数据线只接收 5V 的充电电压

      1
      2
      3
      4
      5
      6
      7
      8
      class USBLine {
      void charge(int volt) {
      // 如果电压不是 5V,抛出异常
      if (volt != 5) throw new IllegalArgumentException("只能接收 5V 电压");
      // 如果电压是 5V,正常充电
      System.out.println("正常充电");
      }
      }
    • 电源适配器

      1
      2
      3
      4
      5
      6
      7
      class Adapter {
      int convert(int homeVolt) {
      // 适配过程:使用电阻、电容等器件将其降低为输出 5V
      int chargeVolt = homeVolt - 215;
      return chargeVolt;
      }
      }
    • 用户使用适配器将家庭电源提供的电压转换为充电电压

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      public class User {
      @Test
      public void chargeForPhone() {
      HomeBattery homeBattery = new HomeBattery();
      int homeVolt = homeBattery.supply();
      System.out.println("家庭电源提供的电压是 " + homeVolt + "V");

      Adapter adapter = new Adapter();
      int chargeVolt = adapter.convert(homeVolt);
      System.out.println("使用适配器将家庭电压转换成了 " + chargeVolt + "V");

      USBLine usbLine = new USBLine();
      usbLine.charge(chargeVolt);
      }
      }
-------------------- 本文结束感谢您的阅读 --------------------