用途


职责链模式 (Chain Of Responsibility)
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链模式是一种行为型模式

结构


图-职责链模式

Handler : 定义一个处理请求的接口。(可选的)实现设置后继者的方法。
abstract class Handler {
    protected Handler successor;
    public void SetSuccesssor(Handler successor) {
        this.successor = successor;
    }
    
    public abstract void HandlerRequest(int request);
}

ConcreteHandler : 处理它所负责的请求,可以访问它的后继者,如果可处理该请求,就处理之,否则就将请求转发给它的后继者。

class ConcreteHandler1 extends Handler {
    @Override
    public void HandlerRequest(int request) {
        if (request >= 0 && request < 10) {
            System.out.println("ConcreteHandler1 处理请求 " + request);
        } else if (null != successor) {
            successor.HandlerRequest(request);
        }
    }
}

class ConcreteHandler2 extends Handler {
    @Override
    public void HandlerRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandler2 处理请求 " + request);
        } else if (null != successor) {
            successor.HandlerRequest(request);
        }
    }
}

class ConcreteHandler3 extends Handler {
    @Override
    public void HandlerRequest(int request) {
        if (request >= 20 && request < 30) {
            System.out.println("ConcreteHandler3 处理请求 " + request);
        } else if (null != successor) {
            successor.HandlerRequest(request);
        }
    }
}

Client : 需要设置一个职责链的各环节对象串联起来。

public class ChainOfResponsibilityPattern {
    public static void main(String[] args) {
        Handler h1 = new ConcreteHandler1();
        Handler h2 = new ConcreteHandler2();
        Handler h3 = new ConcreteHandler3();
        h1.SetSuccesssor(h2);
        h2.SetSuccesssor(h3);
        
        int[] requests = {2, 29, 9, 15, 4, 19};
        for (int i : requests) {
            h1.HandlerRequest(i);
        }
    }
}
推荐

本文属于 JAVA设计模式系列

参考资料

《大话设计模式》

《HeadFirst设计模式》

转载于:https://www.cnblogs.com/jingmoxukong/p/4241496.html

JAVA 设计模式 职责链模式相关推荐

  1. java设计模式---职责链模式

    职责链的本质:分离职责,动态组合 样例: /*** 定义职责对象的接口**/ public abstract class Handler {protected Handler successor;/* ...

  2. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  3. Java设计模式-责任链模式

    Java设计模式-责任链模式,我想这是值得你了解一下下的啦. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持 ...

  4. 第二十章 Caché 设计模式 职责链模式

    文章目录 第二十章 Caché 设计模式 职责链模式 定义 优点 缺点 结构图 描述 完整示例 请求类 抽象责任类 实现责任类 调用 思考 第二十章 Caché 设计模式 职责链模式 定义 使多个对象 ...

  5. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...

  6. java 职责链模式_java设计模式-职责链模式

    模式导读: 作为一名大学生,相信我们都有过请假的经历,在我们请假是总会碰到这样的场景,就是当请假的时间超过5天(包括5天),我们的请假条就不能由班主任进行审阅通过了,而是需要上交院系,由院领导进行审阅 ...

  7. Java设计模式——责任链模式(职责链模式)详解

    模式的定义与特点 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链:当 ...

  8. 设计模式|职责链模式--流程状态审批(枚举实现)

    流程审批 在实际的项目中,我们经常会涉及到某个对象实体的状态转换,比如合同审批,请假审批,订单流程状态流转,由于本文不涉及工作流(Activiti,Zeebe)的介绍,只是介绍职责链模式的设计模式,因 ...

  9. C++设计模式-职责链模式

    目录 基本概念 代码与实例 在哪种地方使用 基本概念 职责链模式(Chain of Responsibility):时多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连 ...

最新文章

  1. recycleview 清空数据 滚动顶部_爱剪辑:制作数字滚动效果,翻滚吧字幕!
  2. extract local variale 和 jsp中查找选中内容的快捷键
  3. react-router5.x 的配置及其页面跳转方法和js跳转方法
  4. windows 服务中托管asp.net core
  5. facade 门面 php,php设计模式之门面(Facade)模式
  6. [转载] Pytorch基础介绍
  7. day6面向对象--继承、多态
  8. ORB:新一代 Linux 应用
  9. python3 yield_详解Python3中yield生成器的用法
  10. wordpress 修改上传文件大小限制
  11. Java Lambda 策略模式
  12. java上传文件到sftp服务器
  13. CSRF - 跨站请求伪造
  14. Php工具箱配置环境+DW
  15. c语言上机调试步骤,C语言上机环境与上机调试.ppt
  16. 1450F The Struggling Contestant(贪心+思维)
  17. 实战一:模拟手机充值场景
  18. [VBA]EXCEL表格,运行VBA报错:运行时错误‘9’ 下标越界
  19. 操作系统进程完成时间,周转时间,带权周转时间, 平均周转时间, 带权平均周转时间计算
  20. springboot一键启动

热门文章

  1. jieba库词频统计_运用jieba库进行词频统计
  2. 帧起始定界符_检测帧起始定界符的方法、装置、设备及计算机存储介质与流程...
  3. 不是单组分组函数_面向对象编程是否已淘汰?函数式编程的枪口瞄错了对象
  4. qcustomplot圆_QCustomPlot使用心得五:坐标轴常用属性设置
  5. c# image转换为bitmap,C# - 转换WPF Image.source到System.Drawing.Bitmap
  6. Node.js webpack vue组件
  7. vue.js computedmethod
  8. freecplus框架简介
  9. php postgresql win,Windows PHP上的PostgreSQL问题
  10. 工作说明书(Statement of Work,简称SOW)