定义
当一个对象或类的接口不能匹配用户所期待的接口时,适配器就可以充当中间转换的角色,以达到兼容用户接口的目的,同时适配器也实现了客户端与接口的解耦,提高了组件的可复用性。
举一个生活中的例子,在很长一段时间里,我们的手机充电接口是MicroUSB,随着时代的发展,新买的手机充电接口已经更换为TypeC接口了,这时以前的充电线就无法继续时使用了。下面我们用代码来描述这样一种冲突。
代码实现
MicroUSB接口,charge充电方法
public interface MicroUSB {
void charge();
}
TypeC 接口,同样的charge充电方法
public interface TypeC {
void charge();
}
Phone类实现了
TypeC
接口,因此只能通过TypeC接口来进行充电。
public class Phone implements TypeC {
@Override
public void charge() {
System.out.println("给TypeC接口手机充电");
System.out.println("手机开机");
}
}
为了不破坏现有的手机充电接口,我们需要一个适配器来做接口转换,有了它我们便可以使用MicroUSB接口为手机充电了。
对象适配器,
适配器类包含被适配的对象
。如果我们仅需要适配特定的类,我们可以使用类适配器模式,例如我们只需要适配Phone类
public class Adapter implements MicroUSB{
/**
* 被适配的设备
*/
private TypeC typeCDevice;
public Adapter(TypeC typeCDevice) {
this.typeCDevice = typeCDevice;
}
@Override
public void charge() {
System.out.println("使用MicroUSB充电");
// 调用被适配的设备的充电方法
typeCDevice.charge();
}
}
客户端,使用MicroUSB接口给TypeC接口的手机充电
public class Client {
public static void main(String[] args) {
TypeC typeCDevice = new Phone();
MicroUSB microUSBDevice = new Adapter(typeCDevice);
microUSBDevice.charge();
// 输出结果
// 使用MicroUSB充电
// 给TypeC接口手机充电
// 手机开机
MicroUSB microUSBPhone = new Adapter2();
microUSBPhone.charge();
// 输出结果
// 使用MicroUSB充电
// 给TypeC接口手机充电
// 手机开机
}
}
可以看到,当我们引入了适配器之后,我们就可以愉快的使用MicroUSB接口为TypeC接口的手机进行充电了,完美的解决了接口之间的冲突。
以上就是适配器模式的所有内容,我将持续更新设计模式,欢迎大家一起交流😁