zoukankan      html  css  js  c++  java
  • Java设计模式(19)——行为模式之责任链模式(chain of responsibilitiy)

    一、概述

      概念

      

      UML简图

      

      角色

      抽象处理器:定义处理请求的接口

      具体处理器:接收到请求后可以选择处理,也可以选择发给下家处理(持有下家的引用)

      当然这里必须指出,实际中纯的责任链模式很难寻找,一般是不纯的责任链模式:也就是一个处理器承担了部分请求,再把部分传递给下家

    而纯的责任链则是要求一个处理器只能有承担责任和传递给下家的两种情况。一般的,我们见到的是不纯的居多。

    二、实践

      给出相应角色的代码

      抽象处理器

    /**
     * 抽象处理器接口
     *
     * @author Administrator
     **/
    public abstract class Handler {
        /**
         * 处理器下家,此处采用逻辑为如果有下家则给下家处理,没有下家则自己处理
         */
        protected Handler successor;
    
        public Handler getSuccessor() {
            return successor;
        }
    
        public void setSuccessor(Handler successor) {
            this.successor = successor;
        }
    
        public abstract void handleRequest();
    }

      具体处理器

    /**
     * 具体处理器
     *
     * @author Administrator
     **/
    public class ConcreteHandler extends Handler{
        @Override
        public void handleRequest() {
            if (getSuccessor() != null) {
                System.out.println("处理转接给:" + getSuccessor());
                getSuccessor().handleRequest();
            } else {
                System.out.println("没有下家处理请求,此处处理请求");
            }
        }
    }

      客户端(把请求给第一个处理器)

    /**
     * 客户端
     * @author  Administrator
     **/
    public class Client {
        public static void main(String[] args) {
            Handler handler1 = new ConcreteHandler();
            Handler handler2 = new ConcreteHandler();
            // 指出第一个处理器的对象的下家是第二个处理器
            handler1.setSuccessor(handler2);
            handler1.handleRequest();
        }
    }

      有了上面的基础,我们来看马士兵老师的栗子:

      想要定义三个规则应对一个字符串的过滤,分别过滤不同的规则(如HTML过滤,关键字过滤),此实例本质与上面是相通的,请注意看本质!

       参考http://www.cnblogs.com/ysw-go/p/5432921.html

  • 相关阅读:
    Elasticsearch--ES-Head--docker版安装
    springboot配置rabbitmq
    springboot开启多线程配置
    Hyper-v安装centos后的网络配置
    阿里云服务器centos7,docker部署mysql+Redis+vue+springboot+Nginx+fastdfs,亲测可用
    安装docker-compose
    装饰器
    数据类型操作中的坑 循环删除
    python数据类型:字典dict常用操作
    函数def
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7764918.html
Copyright © 2011-2022 走看看