参考资料:
简介:
- 标准解释:把一个类的接口转换成客户所希望的另一种接口
- 通俗解释:A方法去调用B方法,由于不能直接使用B方法返回值或者不能直接提供B方法所需参数等原因,需要中间转换的方法,我们把这个转换的方法就叫做适配器
- 如:常见的service层,它把controller层传来的参数,通过处理,来调用dao层;同时把dao层返回的数据经过处理返回给controller层,这么一个数据转换的方法就叫适配器。
- 如:如A方法需要B方法的返回值,并加5,我们单写一个方法C,A调用C,C调用B并+5,我们把C就叫适配器。
- 分类:类适配器、对象适配器、接口适配器
类适配器:
- 以继承的方式,在新接口(即适配器)中调用源方法,并进行相应的数据转换,详见参考代码
- 缺点:JAVA的单继承机制,使得有局限性
- 优点:可以重写父类的方法
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
//获取到220V电压
int srcV = output220V();
int destV = srcV/44;
return destV;
}
}
public class Voltage220V {
//输出220V电压
public int output220V(){
int src = 220;
System.out.println("电压="+src+"伏");
return src;
}
}
public interface Voltage5V {
public int output5V();
}
对象适配器:
- 以聚合的方式,在新接口(即适配器)中调用源方法,并进行相应的数据转换,详见参考代码
- 解决了类适配器单继承局限性问题,平时开发中的三层用的就是该方式
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
@Override
public int output5V() {
//获取到220V电压
int srcV = voltage220V.output220V();
int destV = srcV/44;
return destV;
}
}
public class Voltage220V {
//输出220V电压
public int output220V(){
int src = 220;
System.out.println("电压="+src+"伏");
return src;
}
}
public interface Voltage5V {
public int output5V();
}
接口适配器:
- 比较特殊,常用于想用某接口中的一个或几个抽象方法,但是又不想全部实现该接口
- 以抽象类实现该接口,并提供默认的实现方法,新建抽象类的实例,重写要使用的抽象方法即可。
public interface InterfaceA {
public void m1();
public void m2();
public void m3();
public void m4();
}
//将接口的所有方法进行空实现
public abstract class AbsAdapter implements InterfaceA{
@Override
public void m1(){}
@Override
public void m2(){}
@Override
public void m3(){}
@Override
public void m4(){}
}
public class CLient {
public static void main(String[] args) {
AbsAdapter adapter = new AbsAdapter() {
//只需要关心我们需要的接口方法
@Override
public void m1() {
System.out.println("使用了m1方法!!");
}
};
adapter.m1();
}
}