适配器模式(三)

160 阅读2分钟

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

对适配器模式可以细分成三种:

  1. 类适配器模式
  2. 对象适配器模式
  3. 接口适配器模式

上一篇文章我们举例讲了类适配器模式,这篇文章我们继续讲解一下对象适配器模式

适配器模式使用举例

对象适配器模式

对象适配模式其实秉承着适配器模式的相关理念,即内部依旧包含源头、适配类、目标三个角色。

对比“类适配模式”的概念我们可以类推得到结论:对象适配模式就是以对象为着手点的设计模式,通过组合来实现适配器功能的,也就是说适配器拥有源头角色的实例(对象)。

这里我们举例:如何在pc 上运行手机app。

首先我们定义源头类,即手机上运行app:

public class MobilePhoneExecuteApp {
  public void runOnMobilePhone() {
    System.out.println("运行掘金手机客户端");
  }
}

接下来我们定义目标接口:

public interface PcExecuteApp {
  void run();
}

最后我们定义适配器角色代码:

public class Adapter implements PcExecuteApp {
  MobilePhoneExecuteApp mobilePhoneExecuteApp;
  public Adapter(MobilePhoneExecuteApp mobilePhoneExecuteApp) {
    this.mobilePhoneExecuteApp = mobilePhoneExecuteApp;
  }

  @Override
  public void runOnPc() {
    mobilePhoneExecuteApp.runOnMobilePhone();
  }
}

通过如上适配器类我们可以看出,在适配器类中存在一个有参构造函数,参数是源头类的实例。

因为适配器类中有这个实例引用,所以就可以通过这个实例引用来进行适配转换,从而达到“适配”的目的。

使用:

public static void main(String[] args) {
  MobilePhoneExecuteApp mobilePhoneExecuteApp = new MobilePhoneExecuteApp();
  PcExecuteApp pcExecuteApp = new Adapter(mobilePhoneExecuteApp);
  pcExecuteApp.runOnPc();
}

输出:

运行掘金手机客户端

通过以上方式,我们就可以达到“在pc 上运行手机app”的目的了。

上面的示例代码也很清晰明了,及可以实现:传入参数为“源头类”的实例,然后通过适配器,将其转换为目标角色的api,即实现了PcExecuteApp 调用run 方法的时候,能运行掘金手机app。

总结

我们已经讲解了适配器模式的两种使用方法,相信在看完这两种实现方法之后,我们对适配器模式也有了比较直观的理解。下一篇文章我们会介绍最后一种适配器模式:接口适配器模式。