【设计模式】适配器模式
适配器模式像是一个“接口转换器”,让两个不兼容的接口能够协同工作。比如 Type-C 转 3.5mm 耳机口的转换器,让新手机能用旧耳机。
代码实现
// 1. 旧款圆口充电器(被适配者)
class RoundHoleCharger {
public int getRoundHoleVoltage() {
return 5; // 输出5V电压
}
}
// 2. Type-C充电接口(目标接口)
interface TypeCCharger {
int getTypeCVoltage();
}
// 3. 适配器:将圆口充电器转为Type-C接口
class ChargerAdapter implements TypeCCharger {
private RoundHoleCharger roundHoleCharger;
public ChargerAdapter(RoundHoleCharger roundHoleCharger) {
this.roundHoleCharger = roundHoleCharger;
}
@Override
public int getTypeCVoltage() {
int voltage = roundHoleCharger.getRoundHoleVoltage();
System.out.println("适配器将圆口电压转换为Type-C电压");
return voltage; // 直接传递电压,可能包含转换逻辑
}
}
// 4. 使用示例
public class AdapterDemo {
public static void main(String[] args) {
RoundHoleCharger oldCharger = new RoundHoleCharger();
TypeCCharger typeCCharger = new ChargerAdapter(oldCharger);
System.out.println("Type-C电压:" + typeCCharger.getTypeCVoltage() + "V");
}
}
应用场景案例:Java 中的流处理
场景描述
Java 的 InputStreamReader 是适配器的经典实现,它将字节流 InputStream 适配为字符流 Reader。
import java.io.*;
public class StreamAdapterExample {
public static void main(String[] args) throws IOException {
// 字节流(被适配者)
InputStream inputStream = new FileInputStream("test.txt");
// 适配器:将 InputStream 转为 Reader
Reader reader = new InputStreamReader(inputStream);
// 使用字符流读取数据
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
}
}