java设计模式-适配器模式

来源:互联网 发布:知乎周刊app 编辑:程序博客网 时间:2024/06/05 16:08

最近在看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();    }}
0 0
原创粉丝点击