適配器模式:適配器作為兩個(gè)不兼容的接口之間的橋梁持偏,將一個(gè)類轉(zhuǎn)換成客戶端需要的另一個(gè)接口驼卖,可以將不能一起工作的類一起工作。
適配器有三個(gè)重要元素:
- Target:目標(biāo)接口鸿秆,期望得到的接口酌畜。
- Adaptee:適配器角色,被適配的接口
-
Adapter:適配器卿叽,Target和Adaptee之間的橋梁桥胞,建立之間的聯(lián)系。
如圖:
適配器模式
適用場景:
當(dāng)雙方都不太容易修改的時(shí)候考婴,為了復(fù)用現(xiàn)有組件可以使用適配器模式贩虾,一般在接入第三方組件的時(shí)候用的特別多。
注意:當(dāng)一個(gè)系統(tǒng)適配器模式過多的話蕉扮,會(huì)增加系統(tǒng)的復(fù)雜性整胃。
Mybatis在日志模塊就是用適配器模式接入第三方日志。
可以看看適配器模式在Mybatis日志模塊的使用喳钟。
Mybatis定義的目標(biāo)接口(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);
}
選一個(gè)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);
}
}