- ListView和RecyclerView都会用到Adpater,这个Adapter的中文意思就是适配器,那么Adapter和适配器模式到底有没有关系了?所以先搞清楚,什么是适配器模式?
- 适配器模式有三种:类适配器模式、对象适配器模式、接口适配器模式。这篇主要理清楚类适配器模式。
- 手机充电器的实例,代码参考:适配器模式(java实现)。首先,手机充电需要5v的充电器,定义一个5v充电接口:
// 使用5V充电
public interface Charge5V {
void charging();
}
如果电源是充电宝,可以直接实现充电:
// 充电宝
public class MobilePower implements Charge5V {
@Override
public void charging() {
System.out.println("使用充电宝给手机充电(5V)");
}
}
测试用充电宝在手机中充电:
// 手机
public class Phone {
public void charge(Charge5V c) {
c.charging();
}
public static void main(String[] args) {
Phone phone = new Phone();
MobilePower mobilePower = new MobilePower();
phone.charge(mobilePower);
}
}
- 现在遇到插座(socket),输出电压是220V:
// 插座
public class Socket {
public void chargingWith220V() {
System.out.println("使用插座直接充电(220V)");
}
}
我们不能改写这个Socket类,就像平时开发中客户端,不能修改服务器提供的接口一样。那怎么让这个Socket类也能充电了?
答案是写一个子类继承Socket类,并且实现5v接口。这个子类就是适配器,对应现实中的充电器。这就是类适配器的精华所在,秒不秒?
// 充电器
public class ChargerAdapter extends Socket implements Charge5V {
@Override
public void charging() {
chargingWith220V();
System.out.println("转化为5V");
}
}
有了ChargerAdapter
,插座就可以通过适配器给手机充电了:
// 手机
public class Phone {
public void charge(Charge5V c) {
c.charging();
}
public static void main(String[] args) {
Phone phone = new Phone();
ChargerAdapter chargerAdapter = new ChargerAdapter();
phone.charge(chargerAdapter);
}
}
给我鼓掌!!!!