适配器模式:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作。
适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
适配器模式有两种:类适配器模式和对象适配器模式及哦,其中对象适配器模式更常用。
UML类图
类适配器模式:
//vga接口
interface Vga{
void showVga();
}
//usb接口
interface Usb{
void showUsb();
}
//usb实现类usber
class Usber implements Usb{
@Override
public void showUsb() {
System.out.println("usb");
}
}
//适配器
class Adapter1 extends Usber implements Vga{
@Override
public void showVga() {
showUsb();
}
}
public class Test {
public static void main(String[] args) {
Vga vga = new Adapter1();
vga.showVga();
}
}
通过适配器,使vga接口变为usb接口。
对象适配器模式:
//vga接口
interface Vga{
void showVga();
}
//usb接口
interface Usb{
void showUsb();
}
//usb实现类usber
class Usber implements Usb{
@Override
public void showUsb() {
System.out.println("usb");
}
}
//适配器
class Adapter1 implements Vga{
private Usb usb;
public Adapter1(Usb usb){
this.usb = usb;
}
@Override
public void showVga() {
usb.showUsb();
}
}
public class Test {
public static void main(String[] args) {
Vga vga = new Adapter1(new Usber());
vga.showVga();
}
}
通过组合的方式实现适配器功能,在适配器中定义私有变量usb,再定义一个带参数的构造器为对象usb赋值,再在vga接口的实现方法中使用usb对象调用usb接口的方法。
此外还有接口适配器模式,适用于接口中有很多方法,而我们只想使用其中的一个或几个方法,如果我们直接实现接口,那么我们要对所有的方法进行实现,哪怕我们仅仅是对不需要的方法进行置空(只写一对大括号,不做具体方法实现)也会导致这个类变得臃肿,调用也不方便,这时我们可以使用一个抽象类作为中间件,即适配器,用这个抽象类实现接口,而在抽象类中所有的方法都进行置空,那么我们在创建抽象类的继承类,而且重写我们需要使用的那几个方法即可。