最近在看springmvc, 其中使用了适配器模式, 然后我根据框架中思想, 写了一下我理解的适配器模式 .
适配器接口 :
public interface HandlerAdapter {
public void handle(Object handler);
public boolean support(Object handler);
}
具体适配器OneHandlerAdapter :
public class OneHandlerAdapter implements HandlerAdapter {
// 如果适配器合适, 调用相应方法
@Override
public void handle(Object handler) {
if(handler instanceof OneHandler) {
((OneHandler)handler).oneHandle();
}
}
// 询问适配器是否符合, CustomHandlerAdapter只适合CustomHandler
@Override
public boolean support(Object handler) {
return handler instanceof OneHandler;
}
}
具体适配器TwoHandlerAdapter :
public class TwoHandlerAdapter implements HandlerAdapter {
// 如果适配器合适, 调用相应方法
@Override
public void handle(Object handler) {
if(handler instanceof TwoHandler) {
((TwoHandler)handler).twoHandle();
}
}
// 询问适配器是否符合, CustomHandlerAdapter只适合CustomHandler
@Override
public boolean support(Object handler) {
return handler instanceof TwoHandler;
}
}
需要被适配的OneHandler :
public class OneHandler {
public void oneHandle() {
System.out.println("i love you one ");
}
}
需要被适配的TwoHandler :
public class TwoHandler {
public void twoHandle() {
System.out.println("i love you two");
}
}
客户端使用 :
public class MainController {
private List<HandlerAdapter> listAdapters = new ArrayList<>();
{
listAdapters.add(new OneHandlerAdapter());
listAdapters.add(new TwoHandlerAdapter());
}
public void doDispatcher() {
// 1.先获取一个需要被适配的类(这个类可变,可以是从配置文件获取等)
TwoHandler handler = new TwoHandler();
//OneHandler handler = new OneHandler();
// 2.然后一个一个匹配寻找合适的适配器(目标接口, 客户需要的接口)
HandlerAdapter adapter = getHandlerAdapter(handler);
// 3.进行使用
adapter.handle(handler);
}
public HandlerAdapter getHandlerAdapter(Object handler) {
for(HandlerAdapter adapter : listAdapters) {
if(adapter.support(handler)){
return adapter;
}
}
return null;
}
public static void main(String[] args) {
MainController controller = new MainController();
controller.doDispatcher();
}
}