适配器模式
将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。实现适配器有两种基本形式:
类适配器,使用继承关系实现
对象适配器,使用组合关系实现(常用)
使用场景:
统一多个类的接口设计时,某个功能的实现依赖多个外部系统(或者说类)。通过适配器模式,将它们的接口适配为统一的接口定义
需要依赖外部系统时,当我们把项目中依赖的一个外部系统替换为另一个外部系统的时候,利用适配器模式,可以减少对代码的改动
原有接口无法修改时或者原有接口功能太老旧但又需要兼容;比如JDK1.0 Enumeration 到 Iterator 的替换,适用适配器模式保留 Enumeration 类,并将其实现替换为直接调用 Itertor.
适配不同数据格式时;Slf4j 日志框架,定义打印日志的统一接口,提供针对不同日志框架的适配器
Java代码实现 SDK适配器
类适配器,如下图:

/**
* SD卡接口
**/
public interface SDCard {
//读取SD卡方法
String readSD();
//写入SD卡功能
void writeSD(String msg);
}
/**
* SD卡实现类
**/
public class SDCardImpl implements SDCard {
@Override
public String readSD() {
String msg = "sd card reading data";
return msg;
}
@Override
public void writeSD(String msg) {
System.out.println("sd card write data : " + msg);
}
}
/**
* TF卡接口
**/
public interface TFCard {
//读取TF卡方法
String readTF();
//写入TF卡功能
void writeTF(String msg);
}
/**
* TF卡实现类
**/
public class TFCardImpl implements TFCard {
@Override
public String readTF() {
String msg = "tf card reading data";
return msg;
}
@Override
public void writeTF(String msg) {
System.out.println("tf card write data : " + msg);
}
}
/**
* 定义适配器类(SD兼容TF)
**/
public class SDAdapterTF extends TFCardImpl implements SDCard{
@Override
public String readSD() {
System.out.println("adapter read tf card ");
return readTF();
}
@Override
public void writeSD(String msg) {
System.out.println("adapter write tf card");
writeTF(msg);
}
}
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
SDCard sdCard = new SDCardImpl();
System.out.println(computer.read(sdCard));
SDAdapterTF adapterTF = new SDAdapterTF();
System.out.println(computer.read(adapterTF));
}
}
如果是对象适配器:
public class SDAdapterTF implements SDCard{
private TFCard tfCard;
public SDAdapterTF(TFCard tfCard) {
this.tfCard = tfCard;
}
@Override
public String readSD() {
System.out.println("adapter read tf card ");
return tfCard.readTF();
}
@Override
public void writeSD(String msg) {
System.out.println("adapter write tf card");
tfCard.writeTF(msg);
}
}
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
SDCard sdCard = new SDCardImpl();
System.out.println(computer.read(sdCard));
TFCard tfCard = new TFCardImpl();
SDAdapterTF adapterTF = new SDAdapterTF(tfCard);
System.out.println(computer.read(adapterTF));
}
}
最后更新于
这有帮助吗?