适配器就是一种中间件,它存在于不匹配的两者之间,将不匹配变得匹配,相当于我们常见的转接头(万恶的某果取消3.5mm耳机孔了解一下,还有那么多跟风的)
适配器有三种:类适配器,对象适配器,接口适配器 前两种有些类似 ,第三种有些许不同
1、类适配器
通过继承来实现调用其他类的方法。假如有接口A和B,现在想不改变A的前提下去调用B的方法,这时就可以做一个适配器来做个中转,先实现接口A 然后继承接口B的实现类,这样就可以在中间类去调用接口B中的方法了,也就是可以在中间类实现A中方法的时候去调用B的方法。
public interface A{
public void Arun();
}
public interface B{
public void Brun();
}
public class BImpl implements B {
@Override
public void Brun(){
System.out.println("B is run");
}
}
//适配器
public class AAdapter extends Bimpl implements A {
@Override
public void Arun() {
this.Brun();
}
}
2、对象适配
还是一样的场景。接口A和B,不一样的处理,创建适配器中间类实现A,然后在中间类中有私有属性B,通过b去掉用他的方法
public interface A{
public void Arun();
}
public interface B{
public void Brun();
}
public class BImpl implements B {
@Override
public void Brun(){
System.out.println("B is run");
}
}
//适配器
public class AAdapter implements A {
private B b;
public AAdapter(B b) {
this.b = b;
}
@Override
public void Arun() {
b.Brun();
}
}
3、接口适配
这个场景就和以上不同了,现在有接口A,我们想用他的某一些方法而不是全部,如果实现A那么需要实现全部的方法,即使不写方法体,这时候我们就可以创建中间类去实现A,这个类是个抽象类,我们再去实现这个抽象类,重写我们需要的方法
public Interface A{
public void a();
public void b();
public void c();
}
public abstract Aapter implements A {
@Override
public void a(){};
@Override
public void b(){};
@Override
public void c(){};
}
public b extends Adapter {
@Override
public void a(){
System.out.println("我只需要a");
}
}