适配器模式
图片来源:https://refactoringguru.cn/
对于绝大多数的编程语言,适配器一般会作为用户接口(Client Interface)的实现,然后对服务(Service)进行封装,用户还是和以前一样只跟对应接口进行交互,不需要管真正提供服务的是谁。
我的理解
Client调用Client Interface(客户端)进行相关的操作,真正提供服务的实现类Service的接口与Client Interface(用户接口)的接口并不相同,因此无法调用Service中的方法,因为Client只能和Client Interface进行交互(迪米特法则)。因此我们需要引入一个Adapter实现这个Client Interface,Adapter作为一个适配器,使用Service提供的方法来实现Client Interface接口方法的功能。
实现步骤
前提:客户端只能调用Client Interface的接口方法
创建适配器类实现Client Interface中的方法
根据适配器类型(类适配器、对象适配器)调用service提供的方法
代码
//服务接口
public interface Power {
public void getHightPower();
}
//服务实现类1
public class JapanPower implements Power{
@Override
public void getHightPower() {
System.out.println("提供110V高电压");
}
}
//服务实现类2
public class ChinaPower implements Power {
@Override
public void getHightPower() {
System.out.println("提供220V高电压");
}
}
//客户端接口
public interface PhoneCharger {
/**
* 手机充电器,低压电
*/
public void getLowPower();
}
//适配器类(实现客户端接口,使用服务接口的方法进行实现)
public class Adapter implements PhoneCharger{
private Power power;
public Adapter(Power power) {
this.power = power;
}
@Override
public void getLowPower() {
//插座提供电
power.getHightPower();
System.out.println("转为手机能接受的低电压");
}
}
//客户端调用
public class Client {
public static void main(String[] args) {
//用到了桥接模式吧这里
PhoneCharger charger = new Adapter(new ChinaPower());
charger.getLowPower();
PhoneCharger charger2 = new Adapter(new JapanPower());
charger2.getLowPower();
}
}