适配器模式
什么是适配器模式,它能做什么?下面是比较官方的解释。
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。将一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。
类图
举个栗子
个人比较喜欢看小说,所以我希望有一个小说阅读器(Target)能够直接阅读。
public interface Reader {
void read(String novelName);
}
但是我只找到了起点小说阅读器(Adaptee),而且和我想象的不太一样。
public class QiDianReder {
void startReadTime(String novelName) {
System.out.println("开启欢乐的阅读时光!!! 你正在看" + novelName);
}
}
我期望直接read,而不是类似于QiDianReder的startReadTime。但是可以通过这个接口来做一些事情。所以可以来定制一个属于我私人的阅读器(就是类图中的适配器-----Adapter)。
public class MyReader implements Reader {
private QiDianReder qiDianReder;
public MyReader() {
this.qiDianReder = new QiDianReder();
}
@Override
public void read(String novelName) {
qiDianReder.startReadTime(novelName);
}
}
然后就开始使用这个适配器(客户端调用)
public class Client {
public static void main(String[] args) {
Reader reader = new MyReader();
reader.read("神墓");
}
}
总结
其实就是实现一下期望的接口,在接口中调用一下现有API的方法。装饰器模式这么看起来还是比较简单,如何在实际项目中使用就要看是否需要,不能为了设计模式而去使用设计模式。
在MyBatis的日志模块中也使用到了适配器模式,日志的厂商有如log4j、slf4j等等。这些开发不会为了MyBatis而定义接口,所以MyBatis自己的接口实现类中调用了这些第三方日志的接口。当然具体实现没有这里描述的这么简单,大家可以去看一下MyBatis的Log模块并不复杂。