• 6.适配器模式


    一.介绍

    二.类适配器模式

    1.介绍

    2.UML

    3.代码

    Voltage220V.java

    public class Voltage220V {
    
        public int output220V() {
            int src = 220;
            System.out.println("电压=" + src + "伏");
            return src;
        }
    }

    IVoltage5V.java

    public interface IVoltage5V {
    
        int output5V();
    }

    VoltageAdapter.java

    public class VoltageAdapter extends Voltage220V implements IVoltage5V {
        @Override
        public int output5V() {
    
            int srcV = output220V();
            int dstV = srcV / 44;
            return dstV;
        }
    }

    Phone.java

    public class Phone {
    
        public void charging(IVoltage5V iVoltage5V){
            if (iVoltage5V.output5V() == 5){
                System.out.println("电压为5V,可以充电!");
            }else{
                System.out.println("电压超过5V,不可以充电!");
            }
        }
    }

    Client.java

    public class Client {
    
        public static void main(String[] args) {
            Phone phone = new Phone();
            phone.charging(new VoltageAdapter());
        }
    }

    4.总结

    三.对象适配器模式

    1.介绍

    2.UML

    3.代码

    VoltageAdapter.java

    public class VoltageAdapter extends Voltage220V implements IVoltage5V {
    
        private Voltage220V voltage220V;
    
        public VoltageAdapter(Voltage220V voltage220V) {
            this.voltage220V = voltage220V;
        }
    
        @Override
        public int output5V() {
    
            int dstV = 0;
            if (voltage220V!=null){
                int srcV = voltage220V.output220V();
                dstV = srcV / 44;
            }
            return dstV;
        }
    }

    Client.java

    public class Client {
    
        public static void main(String[] args) {
            Phone phone = new Phone();
            phone.charging(new VoltageAdapter(new Voltage220V()));
        }
    }

    4.总结

    四.接口适配器模式

    1.介绍

    2.UML

    3.代码

    MyInterface.java

    public interface MyInterface {
    
        void m1();
        void m2();
        void m3();
    }

    AdsAdapter.java

    //抽象类
    public abstract class AdsAdapter implements MyInterface {
        @Override
        public void m1() {
    
        }
    
        @Override
        public void m2() {
    
        }
    
        @Override
        public void m3() {
    
        }
    }

    Client.java

    public class Client {
        public static void main(String[] args) {
    
            //匿名内部类实现抽象类的方法来初始化抽象类,相当于子类
            AdsAdapter adsAdapter = new AdsAdapter() {
    
                //只需要覆盖我们需要的接口方法即可
                @Override
                public void m2() {
                    System.out.println("使用m2方法");
                }
    
            };
    
            adsAdapter.m2();
        }
    }

    4.总结

    五.模仿SpringMVC的适配器

    1.UML

    2.代码

    Controller.java

    public interface Controller {
    }
    
    class SimpleController implements Controller {
        public void doSimpleHandler() {
            System.out.println("simple...");
        }
    }
    
    class HttpController implements Controller {
        public void doHttpHandler() {
            System.out.println("http...");
            }
            }
    
    class AnnotationController implements Controller {
        public void doAnnotationHandler() {
            System.out.println("annotation...");
        }
    }

    HandlerAdapter.java

    public interface HandlerAdapter {
    
        boolean supports(Object handler);
    
        void handle(Object handler);
    }
    
    class SimpleHandlerAdapter implements HandlerAdapter {
    
        @Override
        public boolean supports(Object handler) {
            return (handler instanceof SimpleController);
        }
    
        @Override
        public void handle(Object handler) {
            ((SimpleController) handler).doSimpleHandler();
        }
    }
    
    
    class HttpHandlerAdapter implements HandlerAdapter {
    
        @Override
        public boolean supports(Object handler) {
            return (handler instanceof HttpController);
        }
    
        @Override
        public void handle(Object handler) {
            ((HttpController) handler).doHttpHandler();
        }
    }
    
    class AnnotationHandlerAdapter implements HandlerAdapter {
    
        @Override
        public boolean supports(Object handler) {
            return (handler instanceof AnnotationController);
        }
    
        @Override
        public void handle(Object handler) {
            ((AnnotationController) handler).doAnnotationHandler();
        }
    }

    DispatchServlet.java

    public class DispatchServlet {
        public static List<HandlerAdapter> handlerAdapterList = new ArrayList<>();
    
        public DispatchServlet(){
            handlerAdapterList.add(new SimpleHandlerAdapter());
            handlerAdapterList.add(new HttpHandlerAdapter());
            handlerAdapterList.add(new AnnotationHandlerAdapter());
        }
    
        public void doDispatch(Controller controller){
    
            HandlerAdapter adapter = getHandler(controller);
            if (adapter != null){
                adapter.handle(controller);
            }else {
                System.out.println("没有合适的HandlerAdapter去处理");
            }
        }
    
        public HandlerAdapter getHandler(Controller controller){
    
            for (HandlerAdapter adapter : this.handlerAdapterList) {
                if (adapter.supports(controller)){
                    return adapter;
                }
            }
            return null;
        }
    }

    Client.java

    public class Client {
        public static void main(String[] args) {
    
            Controller controller1 = new HttpController();
            Controller controller2 = new SimpleController();
            Controller controller3 = new AnnotationController();
            new DispatchServlet().doDispatch(controller1);
            new DispatchServlet().doDispatch(controller2);
            new DispatchServlet().doDispatch(controller3);
        }
    }

     

  • 相关阅读:
    DOM事件模型
    Javascript 跨域
    浏览器内核及差异
    对WEB标准的理解
    SVN权限解析规则详解
    一款成熟的前端框架——Bootstrap
    终于可以发文了
    一些感想
    Linux升级nodejs及多版本管理
    zepto 自定义build
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12493766.html
Copyright © 2020-2023  润新知