• 适配器模式


    package com.cdkj.project.design.adapter;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * @author YUFEI
     * @ClassName HttpHandler
     * @description: 业务实现类
     * @date 2023年10月12日
     * @version: 1.0
     */
    public class HttpHandler {
        private static final Logger logger = LoggerFactory.getLogger(HttpHandler.class);
        public void doHandle(){
            logger.info("处理http请求");
        }
    }
    

    package com.cdkj.project.design.adapter;
    
    /**
     * @author YUFEI
     * @ClassName HttpAdapter
     * @description: 适配器
     * @date 2023年10月12日
     * @version: 1.0
     */
    public class HttpAdapter implements HandlerAdapter {
        @Override
        public boolean supports(Object handler) {
            return handler instanceof HttpHandler;
        }
    
        @Override
        public void handle(Object handler) {
            HttpHandler httpController  = (HttpHandler) handler;
            httpController.doHandle();
        }
    }
    
    package com.cdkj.project.design.adapter;
    
    /**
     * @author YUFEI
     * @ClassName HandlerAdapter
     * @description: 适配器模式
     * @date 2023年10月12日
     * @version: 1.0
     */
    public interface HandlerAdapter {
        boolean supports(Object handler);
        void handle(Object handler);
    }
    
    package com.cdkj.project.design.adapter;
    
    /**
     * @author YUFEI
     * @ClassName AnnotationAdapter
     * @description: 适配器
     * @date 2023年10月12日
     * @version: 1.0
     */
    public class AnnotationAdapter implements HandlerAdapter {
        @Override
        public boolean supports(Object handler) {
            return handler instanceof AnnotationHandler;
        }
    
        @Override
        public void handle(Object handler) {
            AnnotationHandler annotationController = (AnnotationHandler) handler;
            annotationController.doAnnotationHandle();
        }
    }
    
    package com.cdkj.project.design.adapter;
    
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * @author YUFEI
     * @ClassName AnnotationHandler
     * @description: 业务实现类
     * @date 2023年10月12日
     * @version: 1.0
     */
    public class AnnotationHandler {
        private static final Logger logger = LoggerFactory.getLogger(AnnotationHandler.class);
        public void doAnnotationHandle(){
            logger.info("处理Annotation请求");
        }
    
    }
    
    package com.cdkj.project.design.adapter;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author YUFEI
     * @ClassName CustomDispatchServlet
     * @description: TODO
     * @date 2023年10月12日
     * @version: 1.0
     */
    public class CustomDispatchServlet {
        private final List handlerList = new ArrayList<>(10);
    
        public CustomDispatchServlet() {
            handlerList.add(new AnnotationAdapter());
            handlerList.add(new HttpAdapter());
        }
        public void doDispatch(){
            HttpHandler httpController = new HttpHandler();
            //选择适配器
            HandlerAdapter handler = getHandler(httpController);
            //调用适配器的处理方法
            handler.handle(httpController);
        }
        public HandlerAdapter getHandler(Object handler) {
            for (HandlerAdapter currentHanler : handlerList) {
                if (currentHanler.supports(handler)) {
                   // currentHanler.handle(handler);
                    return currentHanler;
                }
            }
            return null;
        }
        public static void main(String[] args) {
            CustomDispatchServlet customDispatchServlet = new CustomDispatchServlet();
            customDispatchServlet.doDispatch();
        }
    }
    
  • 相关阅读:
    【2012NOIP普及组】T2. 寻宝 试题解析
    为什么大企业都更愿意采用私有化部署?
    calcite 校验层总结
    物联网,智慧城市的数字化转型引擎
    Unsupervised MVS论文笔记
    .NET 扩展官方 Logger 实现将日志保存到本地文件
    解决Map序列化成JSON字符串传给前端后属性乱序问题
    如何搞定五花八门的咖啡饮料?-装饰者模式
    c# iot .net6 树莓派+RS485工业级光照度传感器 代码实例
    linux 查看当前正在运行的端口和监听的端口的工具及命令
  • 原文地址:https://blog.csdn.net/qq_39716220/article/details/133824932