基本概念
生活中的例子
例如我们平时使用的笔记本电脑,可能笔记本电脑的工作电压是20V,但我们一般的家庭用电是220V,这时候电脑在充电的时候就需要一个电源适配器来把220V的电脑转化为20V的电压了。这个电源适配器也别称为充电器或变压器;
我们想用苹果的充电线给安卓的手机充电时。由于两者的接口不一样,会导致充电口无法匹配。这时,我们就需要适配器,将安卓的充电接口转化为苹果的接口,这样,就可以进行充电了;
主要是在新接口和老接口之间进行适配;将一个类的接口转换成客户希望的另一个接口;可以分为类的适配器和对象适配器;
基本代码演示
对象适配器:我们以上面的苹果充电线给安卓手机充电为例:
Target类:
public class Android {
public void isAndroid(){
System.out.println("这是一个只接受安卓充电线的插口");
}
}
Adaptee类:
public class Iphone {
public void isIphone(){
System.out.println("这是一个适配苹果充电线的插口");
}
}
Adapter类:作为中间件,进行适配
//适配器,作为中间件,把他们进行适配
public class Adapter extends Android{
private Iphone iphone;
public Adapter(Iphone iphone){
this.iphone = iphone;
}
@Override
public void isAndroid() {
iphone.isIphone();
}
}
测试类:
public class Demo {
public static void main(String[] args){
Android android = new Adapter(new Iphone());
//调用的是安卓的接口,但实际上
//确实一个可以接受苹果充电器的接口
android.isAndroid();
}
}
对于对象的适配器模式,实际上就是通过一个适配器类,把目标类和需要被适配的类进行组合;所以适配器类Adapter一般需要继承或实现Targert,并且还得持有Adaptee的实例引用;
类适配器:通过继承来实现;
Target接口类:
interface Android {
void isAndroid();
}
Adaptee类:
public class Iphone {
public void isIphone(){
System.out.println("这是一个适配苹果充电线的接口");
}
}
dapter类:继承Adaptee,实现Target:
public class Adapter extends Iphone implements Android{
@Override
public void isAndroid() {
isIphone();
}
}
测试类:
public class Demo {
public static void main(String[] args){
Android android = new Adapter();
android.isAndroid();
}
}
对比:
对象适配器模式通过组合来实现适配器功能,而类的适配器模式通过多继承或实现来实现适配器功能。