最近在看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();
}
}