• 责任链模式


    一、定义

      责任链模式:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。

    二、实现

      1.首先定义一个处理器的接口

      

    /**
     * 处理器接口
     * @author yannic
     */
    public interface IHandler {
        Boolean handle();
    }

      2.具体的处理器

    /**
     * 处理器
     * @author yannic
     */
    public class HandlerA implements IHandler {
        @Override
        public Boolean handle() {
            Boolean handled = false;
            /**
             * 一些处理
             */
            System.out.println("HandlerA do something....");
            return handled;
        }
    }

      3.处理器链

    /**
     * 处理器链
     *
     * @author yannic
     */
    public class HandlerChain {
        private List<IHandler> handlerList = new ArrayList<>();
    
        /**
         * 添加处理器
         * @param handler
         */
        public void addHandle(IHandler handler) {
            handlerList.add(handler);
        }
    
        /**
         * 处理流程
         */
        public void doHandle() {
            for (IHandler handler : handlerList) {
                Boolean handled = handler.handle();
                // 有一个处理了就不需要往下进行了
                if (handled) {
                    break;
                }
            }
        }
    }

    4.测试

    
    
    @Test
    public void handleTest(){
    HandlerChain handlerChain = new HandlerChain();
    handlerChain.addHandle(new HandlerA());
    handlerChain.addHandle(new HandlerB());
    handlerChain.addHandle(new HandlerC());
    handlerChain.doHandle();
    }
    
    

      运行结果:

    HandlerA do something....
    HandlerB do something....
    HandlerC do something....

    我们改一下HandleB的处理结果,handleB处理成功:

    HandlerA do something....
    HandlerB do something....

    可以看到HandleB处理成功后就直接返回了,不会再传给HandleC处理了。

    三、总结

      当我们增加一个处理器时,不需要修改HandleChain的代码。或者我们想选择其中几个过滤器时,也不需要修改原代码。可以看到用责任链模式非常的易扩展。

      实际开发时,我们不一定严格按照有一个处理器处理就返回的规则,有时候是需要所有处理器都处理一遍。

  • 相关阅读:
    毕业设计进度16
    毕业设计进度15
    毕业设计进度14
    毕业设计进度13
    毕业设计进度12
    毕业设计进度11
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    Media Queries详解
    css 选择器
    css内容样式属性
  • 原文地址:https://www.cnblogs.com/ITyannic/p/12907610.html
Copyright © 2020-2023  润新知