适配器模式将一个类接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。
适配器的例子,现实生活随处可见。比如你只有USB-C接口的耳机,但是你的手机只有TYPE-C接口,这个时候你可能需要一个TYPE-C适配器。
适配器工作起来就如同一个中间人,他将客户所发出的请求转换成原有接口能理解的请求。
定义两个接口类
public interface TYPEProtocol {
/**
* TYPE-协议
*/
void typeProtocol();
}
public interface USBProtocol {
/**
* USB-C协议
*/
void usbProtocol();
}
充电器实现TYPE-C接口
public class Charger implements TYPEProtocol{
/**
* 充电器实现TYPE-C协议
*/
public void typeProtocol() {
System.out.println("充电器使用TYPE-C协议");
}
}
耳机实现USB-C接口
public class Earphone implements USBProtocol {
/**
* 耳机实现USB-C协议
*/
public void usbProtocol() {
System.out.println("耳机使用USB-C协议");
}
}
手机类
public class Cellphone {
/**
* 手机接入TYPE-C
* @param protocol
*/
public void joinUp(TYPEProtocol protocol){
protocol.typeProtocol();
}
}
运行
public class Main {
public static void main(String[] args) {
TYPEProtocol charger = new Charger();
USBProtocol earphone = new Earphone();
Cellphone cellphone = new Cellphone();
//充电器接入手机
cellphone.joinUp(charger);
}
}
结果
充电器使用TYPE-C协议
因为耳机类并没有实现TYPE-C协议,而是实现USB-C协议,所以无法接入手机。创建TYPE-C适配类
public class TYPEProtocolAdapter implements TYPEProtocol{
private USBProtocol usbProtocol;
public TYPEProtocolAdapter(USBProtocol usbProtocol) {
this.usbProtocol = usbProtocol;
}
@Override
public void typeProtocol() {
System.out.println("适配TYPE-C协议");
usbProtocol.usbProtocol();
}
}
运行
public class Main {
public static void main(String[] args) {
TYPEProtocol charger = new Charger();
USBProtocol earphone = new Earphone();
TYPEProtocol typeProtocolAdapter = new TYPEProtocolAdapter(earphone);
Cellphone cellphone = new Cellphone();
//充电器接入手机
cellphone.joinUp(charger);
//通过适配器接入手机
cellphone.joinUp(typeProtocolAdapter);
}
}
通过适配器USB-C协议也能接入手机,运行结果
充电器使用TYPE-C协议
适配TYPE-C协议
耳机使用USB-C协议
网友评论