zoukankan      html  css  js  c++  java
  • 设计模式(二十一)---责任链模式

    1、简介

      责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

      发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

    2、责任链模式涉及的角色

      ●  抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。

      ●  具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。

    3、源代码

      3.1、抽象处理者角色

    package Chain;
    /**
     * ********************************************************  
    * @ClassName: Handler 
    * @Description: 抽象处理者角色
    *  
    **********************************************************
     */
    public abstract class Handler {
        /** 
         * 持有后继的责任对象 
         */  
        protected Handler successor;  
        /** 
         * 示意处理请求的方法,虽然这个示意方法是没有传入参数的 
         * 但实际是可以传入参数的,根据具体需要来选择是否传递参数 
         */  
        public abstract void handleRequest();  
        /** 
         * 取值方法 
         */  
        public Handler getSuccessor() {  
            return successor;  
        }  
        /** 
         * 赋值方法,设置后继的责任对象 
         */  
        public void setSuccessor(Handler successor) {  
            this.successor = successor;  
        }  
    }

      3.2、具体处理者角色

    package Chain;
    /**
     * ********************************************************  
    * @ClassName: ConcreteHandler 
    * @Description: 具体处理者角色
    *  
    **********************************************************
     */
    public class ConcreteHandler extends Handler{
         /** 
         * 处理方法,调用此方法处理请求 
         */  
        @Override  
        public void handleRequest() {  
            /** 
             * 判断是否有后继的责任对象 
             * 如果有,就转发请求给后继的责任对象 
             * 如果没有,则处理请求 
             */  
            if(getSuccessor() != null)  
            {              
                System.out.println("放过请求");  
                getSuccessor().handleRequest();              
            }else  
            {              
                System.out.println("处理请求");  
            }  
        }  
    }

      3.3、测试客户端

    package Chain;
    /**
     * ********************************************************  
    * @ClassName: Client 
    * @Description: 责任链模式测试客户端
    *  
    **********************************************************
     */
    public class Client {
    
        public static void main(String[] args) {
            //组装责任链  
            Handler handler1 = new ConcreteHandler();  
            Handler handler2 = new ConcreteHandler();  
            handler1.setSuccessor(handler2);  
            //提交请求  
            handler1.handleRequest();  
    
        }
    
    }
  • 相关阅读:
    百度影音盒插入论坛帖子自动播放代码及方法
    vFloppy1.5-虚拟启动软盘
    飞秋的实现原理
    博客盈利请先考虑这七点
    下载站运行广告合作exe文件然后再运行程序文件的bat
    木马病毒是什么以及手工清除木马病毒具体步骤
    网站盈利模式分析分类
    软件更新原理
    浅析php学习的路线图
    网页常用分享代码大全(前端必备)
  • 原文地址:https://www.cnblogs.com/shun-gege/p/7524988.html
Copyright © 2011-2022 走看看