场景引入
想象这样一个场景:在之前的手机上面都是有一个耳机孔的,但是现在却逐渐的取消,只有一个type接口。在这种情况下,我们需要一个type接口的转化器。在这种情况下,解决方法就有两种:1)将耳机的插口也换成type的;2)为了使之前的耳机还能使用,我们需要一个转接口。即一边是插入type接口的,一边是插入那种圆形的耳机的。解决方案二中的转接器其实就是一个适配器。其将一些老的接口进行适配从而可以满足新的接口需求。
代码实现
Earphone interface
public class Earphone {
//耳机的插入
public void insert(){
System.out.println("满足手机的接口需求");
};
}
Phone interface
interface Phone {
public void play();
}
Adaptee class
//对象适配器
public class Adaptee implements Phone{
private Earphone earphone;
public Adaptee(Earphone earphone) {
this.earphone = earphone;
}
@Override
public void play() {
System.out.println("使用适配器,将耳机转为typeC接口");
earphone.insert();
}
}
Test class
public class Test {
public static void main(String[] args) {
Phone phone = new Adaptee(new Earphone());
phone.play();
}
}
类适配器
Adapter class
public class Adapter extends Earphone implements Phone{
@Override
public void play() {
System.out.println("使用适配器,将耳机转为typeC接口");
this.insert();
}
}
Test class
public class Test {
public static void main(String[] args) {
Phone phone = new Adapter();
phone.play();
}
}
个人理解
适配器就是将旧的类进行适配,从而满足新的需求。其实看起来就像是新建一个子类,然后对其中的方法进行重写,然后利用多态的性质,调用新的子类的方法。说其是适配器可能就是因为适配器是适配两个不同的对象,而不是那种具有父子类关系的