适配器模式(四)

81 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

上一篇文章我们讲的是设计模式的第二种细分模式:对象适配器模式,这篇文章我们讲最后一种适配器模式:接口适配器模式

适配器模式使用举例

对象适配器模式

接口适配模式同时也秉承着适配器模式的相关理念,即内部依旧包含源头、适配类、目标三个角色。

对比前两种细分的适配器模式我们依旧可以推断出,接口适配器模式是以接口为着手点的。

接口适配器模式相比于前两种来说更加灵活多变,就好比万能钥匙、万能充、万能扳手一样,在某个领域可以实现很多功能。接下来我们还是拿万能充电源来举例子,不论目标要求多少V,我们都可以提供。上代码。

首先,定义源头,这里我们定义一个常用的220V 电压和安全的36V 电压,但是在定义两种具体电压之前,先定义一个抽象电源类,并设置默认值为220V。代码如下:

public abstract class Power {
  public int getVoltage() {
    return 220;
  }
}

定义具体电源类:

(这里由于继承了抽象类,默认是220V,所以不写override 方法,但是日常开发中最好覆盖)

public class Power220V extends Power {

}
public class Power36V extends Power {
  @Override
  public int getVoltage() {
    return 36;
  }
}

以上完成了源头类的定义,接下来是第二个关键角色:目标。

public interface Voltage4V {
  int getVoltage4V();
}

最后是主角,适配器类:

public class AdapterPower implements Voltage4V {

  private Power power;

  public AdapterPower(Power220V power) {
    this.power = power;
  }

  public AdapterPower(Power36V power) {
    this.power = power;
  }

  @Override
  public int getVoltage4V() {
    int divisor = power.getVoltage() / 5;
    return power.getVoltage() / divisor;
  }
}

(以上解释一下override 中的方法,因为我们是根据构造方法得到的