适配器模式

适配器模式:适配器作为两个不兼容的接口之间的桥梁,将一个类转换成客户端需要的另一个接口,可以将不能一起工作的类一起工作。

适配器有三个重要元素:

  1. Target:目标接口,期望得到的接口。
  2. Adaptee:适配器角色,被适配的接口
  3. Adapter:适配器,Target和Adaptee之间的桥梁,建立之间的联系。
    如图:


    适配器模式

适用场景:
当双方都不太容易修改的时候,为了复用现有组件可以使用适配器模式,一般在接入第三方组件的时候用的特别多。
注意:当一个系统适配器模式过多的话,会增加系统的复杂性。

Mybatis在日志模块就是用适配器模式接入第三方日志。
可以看看适配器模式在Mybatis日志模块的使用。

Mybatis定义的目标接口(Target)

public interface Log {

  boolean isDebugEnabled();

  boolean isTraceEnabled();

  void error(String s, Throwable e);

  void error(String s);

  void debug(String s);

  void trace(String s);

  void warn(String s);

}

选一个Slf4j的适配器看看

class Slf4jLoggerImpl implements Log {

  private final Logger log; //被适配的接口

  public Slf4jLoggerImpl(Logger logger) {
    log = logger;
  }

  @Override
  public boolean isDebugEnabled() {
    return log.isDebugEnabled();
  }

  @Override
  public boolean isTraceEnabled() {
    return log.isTraceEnabled();
  }

  @Override
  public void error(String s, Throwable e) {
    log.error(s, e);
  }

  @Override
  public void error(String s) {
    log.error(s);
  }

  @Override
  public void debug(String s) {
    log.debug(s);
  }

  @Override
  public void trace(String s) {
    log.trace(s);
  }

  @Override
  public void warn(String s) {
    log.warn(s);
  }

}

你可能感兴趣的:(适配器模式)