适配器模式:适配器作为两个不兼容的接口之间的桥梁,将一个类转换成客户端需要的另一个接口,可以将不能一起工作的类一起工作。
适配器有三个重要元素:
- Target:目标接口,期望得到的接口。
- Adaptee:适配器角色,被适配的接口
-
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);
}
}