适配器模式
定义:将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。这个定义还好,说适配器的功能就是把一个接口转成另一个接口。
-
以充电器为实例: 手机充电器一般都是5V左右吧,咱天朝的家用交流电压220V,所以手机充电需要一个适配器(降压器)
-
一部手机:
public class Mobile {
// 这里传入的是 v5接口,实现了这个接口的类也可以传入
public void inputPower(V5Power v5Power) {
int provideV5Power = v5Power.provideV5Power();
Log.e("---", "手机(客户端): 我需要的是5V电压充电,现在是" + provideV5Power + "V");
}
}
- 手机依赖一个提供5V电压的接口:
```
public interface V5Power {
public int provideV5Power();
}
-
我们拥有的是220V家用交流电
```
public class V220Power {public int provideV220Power() { Log.e("---", "现有类: 我们提供的是220v的家用电"); return 220; } }
- 适配器,完成220V转5V的作用,将200v家用电转换为5v手机用电的适配器
```java
public class V5PowerAdapter implements V5Power {
private int v220power;
public V5PowerAdapter(V220Power v220Power) {
v220power = v220Power.provideV220Power();
}
@Override
public int provideV5Power() {
Log.e("---", "适配器: 经过复杂的操作,将" + v220power + "v电压转为5v");
return 5;
}
}
-
最后测试:给手机冲个电:
Mobile mobile = new Mobile(); V5Power v5Power = new V5PowerAdapter(new V200Power()); mobile.inputPower(v5Power);
总结
将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作
常见的SpringMVC中的适配器(HandlerAdapter)
首先我们找到前端控制器DispatcherServlet可以把它理解为适配器模式中的Client,它的主要作用在于通过处理映射器(HandlerMapper)来找到相应的Handler(即Controlle(宽泛的概念Controller,以及HttpRequestHandler,Servlet,等等),并执行Controller中相应的方法并返回ModelAndView。
Spring创建了一个适配器接口(HandlerAdapter)使得每一种处理器(宽泛的概念Controller,以及HttpRequestHandler,Servlet,等等)有一种对应的适配器实现类,让适配器代替(宽泛的概念Controller,以及HttpRequestHandler,Servlet,等等)执行相应的方法。这样在扩展Controller 时,只需要增加一个适配器类就完成了SpringMVC的扩展了