1.1. 什么是适配器
生活中的适配器:
电源适配器:将原本不满足使用要求的220V交流电转换成符合使用要求的直流电;
调制解调器:将电信号和光信号之间相互转换;
适配器模式:
一种设计模式,解决的问题就是:
将原来不符合使用要求的东西转换成符合使用要求的东西;
1.2. Java中的适配器
java中,根据转换对象的不同,可以将适配器分为三类:
类的适配;对象的适配;接口的适配;
需求:看下列程序,分别书写实现类满足User类的需求;
interface Inter{//接口
public void method1();
public void method2();
public void method3();
public void method4();
public void method5();
}
class User{//用户类
public static void test1(Inter i){
i.method1();
i.method2();
}
public static void test2(Inter i){
i.method2();
}
public static void test3(Inter i){
i.method4();
}
}
问题:因为多个实现类中只使用了接口中的某几个方法,但是不得不实现接口中所有方法,造成方法的大量浪费
解决思路:
可以专门使用一个类来实现接口,然后让其他类都来继承这个实现类,在其他的继承的类中就只需要重写需要的功能,不需要写多个无用的方法;
使用适配器类对接口进行适配,具体的业务逻辑类(实现具体功能的类)就不需要直接和接口打交道,可以只关心具体的业务逻辑;
interface Inter{//接口
public void method1();
public void method2();
public void method3();
public void method4();
public void method5();
}
class User{//用户类
public static void test1(Inter i){
i.method1();
i.method2();
}
public static void test2(Inter i){
i.method2();
}
public static void test3(Inter i){
i.method4();
}
}
/*
根据需求,需要写三个实现类,分别实现接口Inter,分别供User类的三个方法使用;
*/
//首先专门创建一个类,实现接口
//一般因为这个类,只是实现接口中的所有抽象函数,
//没有具体的有意义的功能,所以一般不允许创建这个类的对象;
//因为其他类还要继承它,又不想让它创建对象,所以需要声明为抽象类
abstract class Adaptor implements Inter{
public void method1(){}
public void method2(){}
public void method3(){}
public void method4(){}
public void method5(){}
}
class InterImpl1 extends Adaptor{
public void method1(){
System.out.println("method1 实现1");
}
public void method2(){
System.out.println("method2 实现1");
}
}
class InterImpl2 extends Adaptor{
public void method2(){
System.out.println("method2 实现2");
}
}
class InterImpl3 extends Adaptor{
public void method4(){
System.out.println("method4 实现3");
}
}
1.3. 适配器小结
适配器的作用,就是适配、转换,将不符合使用要求的东西转换为符合使用要求的;
适配器设计模式,解决的是怎么将不符合使用要求的类、对象或接口转换为符合使用要求的;
根据适配的对象不同,可以将适配器分为类的适配、对象的适配和接口的适配;
接口的适配的步骤:
1、创建一个适配器类实现接口,在这个类中使用空实现实现接口中的所有抽象函数;
2、因为适配器类中的函数都是空实现的,创建该类的对象没有意义,所以要将适配器类定义为抽象类;
3、要使用适配器类,只需书写类继承适配器类即可;