适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。在java代码里就是创建一个适配器接口,然后写适配器的实现类来让他们在接口里实现功能。这样只要调用适配器的同一接口,不需要调用每个类中可能不同的实现方法。
public interface Duck {
public void quack();
public void fly();
}
public class MallarDuck implements Duck{
@Override
public void quack() {
System.out.println("Quack");
}
@Override
public void fly() {
System.out.println("I am flying");
}
}
public interface Turkey {
void gobble();
void fly();
}
public class WildTurkey implements Turkey{
public void gobble() {
System.out.println("Gobble gobble");
}
public void fly() {
System.out.println("T am flaying a short distance");
}
}
public class TurkeyAdapter implements Duck{
private Turkey turkey;
public TurkeyAdapter (Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
spring mvc 中HandlerAdapter 就使用的适配器模式 这个接口一共就3个方法
boolean supports(Object handler);
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
long getLastModified(HttpServletRequest request, Object handler);
这是它的实现类
下面是几个实现类的handle 的方法
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((HttpRequestHandler) handler).handleRequest(request, response);
return null;
}
@Override
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
((Servlet) handler).service(request, response);
return null;
}
很明显看出 每个适配器实现类 实现handle的方法 都是调用其他具体类的方法,并且这些类的方法名或参数没有统一起来,使用了 适配器,只需调用handle方法就行。