zoukankan      html  css  js  c++  java
  • 责任链模式

    一、定义

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

    二、实现

      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的代码。或者我们想选择其中几个过滤器时,也不需要修改原代码。可以看到用责任链模式非常的易扩展。

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

  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/ITyannic/p/12907610.html
Copyright © 2011-2022 走看看