明天你会感谢今天奋力拼搏的你。
ヾ(o◕∀◕)ノヾ

public class ListAdapter extends HashMap {
private List list;
public ListAdapter(List list) {
this.list = list;
}
@Override
public int size() {
return list.size();
}
}
public class LogAdapter implements LogWriteDbService {
// 源 Adaptee
private LogWriteFileService logWriteFileService;
public LogAdapter(LogWriteFileService logWriteFileService) {
this.logWriteFileService = logWriteFileService;
}
// 新增的扩展功能 既能够支持写入本地文件,也能支持写入数据库
public void logWriteDb(LogBean logBean) {
// 2.将数据写入到数据库中..
System.out.println(">>>写入到数据库中..");
// 写入本地文件
logWriteFileService.logWriteFile();
}
}
如下图所示,先找到mybatis的Log接口,看继承树发现mybatis对其他第三方日志框架都有其Log的实现类。

怎么让我本身的日志可以适配其他第三方日志呢,以log4j2为例,看如下Log4j2Impl代码可知,在构造函数中引用了log4j的类,生成了Logger对象,最后通过Log4j2LoggerImpl类和Log4j2AbstractLoggerImpl类转换成Mybatis自身的Log对象。

而具体的Log4j2LoggerImpl类中也很简单,如下就是把log4j2的日志对象通过构造函数传入,实现自己的Log接口,以log4j2的日志对象重写其方法。

Log4j2LoggerImpl和Log4j2Impl其实都是适配器,只是多了一层嵌套让外层的Log4j2Impl做了一些兼容判断。
参考文献:
https://www.runoob.com/design-pattern/adapter-pattern.html
http://www.mayikt.com/front/couinfo/194/0
全部评论