适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。
适配器模式的种类:类适配器、对象适配器、接口适配器
前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。
一、 类适配器模式:
1、原理:通过继承来实现适配器功能。
2、实例讲解:
我手中有个ps2插头的设备,但是主机上只有usb插头的插口,怎么办呢?弄个转换器,将ps2插头转换成为USB插头就可以使用了。
接口Ps2:描述ps2接口格式
接口Usb:描述USB接口格式
类Usber:是接口Usb的实现类,是具体的USB接口格式
Adapter:用于将ps2接口格式转换成为USB接口格式
IPS2接口:
public interface IPS2 {
void isPs2();
}
IUSB接口:
public interface IUSB {
void isUsb();
}
USB接口实现类:
public class Usber implements IUSB{
@Override
public void isUsb() {
System.out.println("USB接口");
}
}
适配器:Adapter
public class Adapter extends Usber implements IPS2 {
@Override
public void isPs2() {
isUsb();
}
}
测试:
public class AdapterTest {
@Test
public void test() {
IPS2 ps2 = new Adapter();
ps2.isPs2();
}
}
二、 对象适配器模式
1、原理:通过组合来实现适配器功能。
2、实例:
适配器:Adapter
public class Adapter implements IPS2 {
private IUSB usb;
public Adapter(IUSB usb) {
this.usb = usb;
}
@Override
public void isPs2() {
usb.isUsb();
}
}
测试:
public class AdapterTest {
@Test
public void test() {
IPS2 ps2 = new Adapter(new Usber());
ps2.isPs2();
}
}
三、 接口适配器模式
1、原理:通过抽象类来实现适配,这种适配稍别于上面所述的适配。
当存在这样一个接口,其中定义了N多的方法,而我们现在却只想使用其中的一个到几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。
目标接口:A
public interface A {
void a();
void b();
void c();
void d();
void e();
void f();
}
适配器:Adapter
public abstract class Adapter implements A {
public void a(){}
public void b(){}
public void c(){}
public void d(){}
public void e(){}
public void f(){}
}
实现类:Ashili
public class Ashili extends Adapter {
public void a(){
System.out.println("实现A方法被调用");
}
public void d(){
System.out.println("实现d方法被调用");
}
}
测试类:Clienter
public class Clienter {
public static void main(String[] args) {
A a = new Ashili();
a.a();
a.d();
}
}