适配者模式即是将一个接口转化为另一个接口
方式1:类适配器:继承真正的功能类,并实现对外开放的接口,在实现抽象方法时,直接调用父类的方法即可,即是super。function(), main方法使用时以规定接口的类型而实质创建该实现类对象调用方法时,实际上执行的是功能类的方法。(体现了多态调用)
方式2:对象适配器:仅仅实现对外开放的接口,将真正的功能类作为适配器类的成员变量,并必须设置有参的构造方法,对其成员进行初始实例化,实现该接口的抽象方法时,直接使用成员调用自己的方法即可。
方式3:某个接口中定义了大量的抽象方法。但是在特定的场合下,可能只需要用到其中的某些方法,如果直接实现接口, 就需要重写接口中所有的方法。定义一个抽象类,让抽象类实现该接口,将接口中的所有方法都空实现,然后继承该抽象类,重写需要实用的方法。
以USB接口和TypeC的关系对方式1,2进行验证:
代码如下:
class TypeC{
public void function() {
System.out.println("TypeC的功能");
}
}
interface Usb{
public abstract void function();
}
//类适配器
class Adapter extends TypeC implements Usb{
@Override
public void function() {
super.function();
}
}
//对象适配器
class Adapter1 implements Usb{
private TypeC typec;
public Adapter1(TypeC typeC) {
this.typec = typeC;
}
@Override
public void function() {
typec.function();
}
}
public class AdapterDemo {
public static void main(String[] args) {
Usb usb = new Adapter();
usb.function();
TypeC typeC = new TypeC();
Usb usb2 = new Adapter1(typeC);
usb2.function();
}
}