适配器模式像是一个“接口转换器”,让两个不兼容的接口能够协同工作。比如 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;}@Overridepublic 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 转为 ReaderReader reader = new InputStreamReader(inputStream);// 使用字符流读取数据BufferedReader bufferedReader = new BufferedReader(reader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}bufferedReader.close();}
}