只需一步,快速开始
主题 901|帖子 901|积分 2703
在现实生活中,一个事件需要经过 多个对象 处理是很常见的场景。比如:采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请求的天数去找不同的领导签名,即员工必须记住每个领导的姓名、电话和地址信息,这使得该流程变得复杂冗余。
在计算机软件开发中也有相关的例子,比如 异常处理,处理程序根据异常的类型决定自己是否处理该异常;还有 Struts2 的 拦截器、JSP、Servlet 的 Filter过滤器等,都可以考虑使用 责任链(职责链)设计模式 来实现。Servlet 的 Filter过滤器的实现确实使用了 责任链设计模式
责任链(Chain of Responsibility) 模式的定义:为了避免 请求发送者 与 多个请求处理者 耦合在一起,于是将所有的 请求处理者 通过让 前一对象 记住 其下一个对象的引用 的方式而形成了一个 链条;当有请求发生时,可将请求沿着该 链条 传递,直到有对象处理当前请求为止。
在 责任链模式 中,客户只需要将请求发送到 责任链 上即可,无需关心请求的 处理 和请求的 传递过程,请求会 自动 进行传递,因此 责任链模式 将请求的 发送者 和请求的 处理者 解耦合了
责任链模式是一种 对象行为型 模式
责任链模式 的本质是解耦 请求 与 处理,让请求在 处理链 中能进行 传递 与 被处理;理解 责任链模式 应该理解其 模式,而不是其具体实现。责任链模式 的独到之处是将其节点处理者组合成了 链式结构,并允许节点自身决定是否进行 请求处理 或 转发,相当于让请求 流动 起来
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
滴水恩情