将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
public class Adapter_Main {
public static void main(String[] args) {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
dispatcherServlet.doDispatcher(new MethodController());
}
}
interface Controller{}
class MethodController implements Controller{
void doMethod(){
System.out.println("MethodController...doMethod...");
}
}
class MultiController implements Controller{
void doMulti(){
System.out.println("MethodController...doMethod...");
}
}
interface Adapter{
boolean support(Object handler);
void handler(Object handler);
}
class MethodControllerAdapter implements Adapter{
@Override
public boolean support(Object handler) {
return handler instanceof MethodController;
}
@Override
public void handler(Object handler) {
System.out.println("MethodControllerAdapter...handler...start...");
((MethodController)handler).doMethod();
System.out.println("MethodControllerAdapter...handler...end...");
}
}
class MultiControllerAdapter implements Adapter{
@Override
public boolean support(Object handler) {
return handler instanceof MultiController;
}
@Override
public void handler(Object handler) {
System.out.println("MultiControllerAdapter...handler...start...");
((MultiController)handler).doMulti();
System.out.println("MultiControllerAdapter...handler...end...");
}
}
class DispatcherServlet{
private List<Adapter> adapters = Lists.newArrayList();
public DispatcherServlet(){
adapters.add(new MethodControllerAdapter());
adapters.add(new MultiControllerAdapter());
}
public void doDispatcher(Object handler){
System.out.println("doDispatcher...");
Iterator<Adapter> iterator = adapters.iterator();
do {
Adapter next = iterator.next();
if (next.support(handler)){
next.handler(handler);
break;
}
} while (iterator.hasNext());
}
}