系列文章目录
前言
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
适配器的实现方式
适配器可以继承或依赖已有的对象,然后实现想要的目标接口。
示例
生活中有一个实例就是,笔记本上想要插内存卡就必须借助读卡器,读卡器就是笔记本usb接口和内部卡接口之间的适配器。将内存卡插入读卡器,再将读卡器插入笔记本,就能实现用笔记本读取内存卡了。
继承实现
usb接口
public interface UsbInterface {
public void read();
}
内存卡类
public class MemoryCard {
public void readCard(){
System.out.println("读取内存卡");
}
}
电脑类
public class Computer {
public void readCard(UsbInterface usb){
usb.read();
}
}
电脑依赖使用Usb接口,想要使用内存卡,就必须要有一个适配器读卡器
读卡器适配器类
public class CardReaderAdapter extends MemoryCard implements UsbInterface{
@Override
public void read() {
readCard();
}
}
这里使用的是继承方式,继承了内存卡类
客户端类
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
computer.readCard(new CardReaderAdapter());
}
}
使用继承暴露了所有被适配类的方法,增大了耦合性,建议使用有依赖聚合的方式
依赖实现
依赖实现的适配器
public class CardReaderAdapter implements UsbInterface {
private MemoryCard card;
CardReaderAdapter(MemoryCard card){
this.card = card;
}
@Override
public void read() {
card.readCard();
}
}
在Spring源码中的使用
在Spring源码中的转化服务GenericConversionService
就使用到了适配器模式
addConverter(GenericConverter converter)
方法需要依赖使用GenericConverter
类,但是只有Converter
对象,这时就需要一个适配器进行适配。
可以看到ConverterAdapter
适配器实现了GenericConverter
接口,并且聚合了Converter
对象。这里就使用到了适配器模式。