适配器模式
1.基础知识
定义∶
将一个类的接口转换成客户期望的另一个接口
使原本接口不兼容的类可以一起工作
适配器就是将一种接口转换成另一种接口并且不改变其功能的正常性
适用场景
已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)
不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案
优点
能提高类的透明性和复用,现有的类复用但不需要改变
目标类和适配器类解耦,提高程序扩展性
缺点
适配器编写过程需要全面考虑,可能会增加系统的复杂性
增加系统代码可读的难度
扩展
对象适配器
类适配器
2.实战
比如手机充电器,家用电是220V交流电的,但是手机是5v直流电,这里就需要一个适配器
/**
* 原有的功能:交流电220V
*/
public class AC220 {
public int outputAC220V() {
int output = 220;
System.out.println("输出交流电" + output + "V");
return output;
}
}
/**
* 想要实现的功能:直流电5v
*
* @Author LYS
* @Date 2022/1/16 20:13
* @Version 1.0
*/
public interface DC5 {
int outputDC5V();
}
/**
* 充电器
*
* @Author LYS
* @Date 2022/1/16 20:13
* @Version 1.0
*/
public class PowerAdapter implements DC5 {
AC220 ac220 = new AC220();
@Override
public int outputDC5V() {
int adapterInput = ac220.outputAC220V();
//变压器...
int adapterOutput = adapterInput / 44;
System.out.println("使用PowerAdapter输入AC:" + adapterInput + "V" + "输出DC:" + adapterOutput + "V");
return adapterOutput;
}
}
/**
* @Author LYS
* @Date 2022/1/16 20:15
* @Version 1.0
*/
public class Test {
public static void main(String[] args) {
PowerAdapter powerAdapter= new PowerAdapter();
powerAdapter.outputDC5V();
}
}
控制台输出:
3.源码:
比如springmvc里的handleradapter
doDispatch里的 就是选取对饮的适配器来处理请求
// Determine handler adapter for the current request.
// 通过handler获取对应的适配器,adapter负责完成参数解析
HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());