推卸责任的 Chain of Responsibility模式
文章目录
- Chain of Responsibility模式
- 应用场景
- 本质
- 优点
- 缺点
- 角色
- Chain of Responsibility模式的类图
- 示例程序
- 示例程序的类图
- 示例代码
- 拓展思路
- 相关设计模式
- 满足的原则
Chain of Responsibility模式
应用场景
- 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。
本质
- 分离职责,动态组合
优点
- 请求者和接收者松散耦合
- 动态组合职责
缺点
- 产生很多细粒度对象
- 不一定能被处理
需要提供默认处理
角色
- 抽象处理者(Handler)角色
定义出一个处理请求的接口。 如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色 通常由一个抽象类或接口实现。 - 具体处理者(ConcreteHandler)角色
具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
由于具体处理者持有对下家的引用,因此,如果需要, 具体处理者可以访问下家。
Chain of Responsibility模式的类图
示例程序
示例程序的类图
示例代码
public class Handler {protected Handler successor;public void setSuccessor(Handler successor) {this.successor=successor;}public void HandleRequest(int request) {}
}
public class ConcreteHandler1 extends Handler {public void HandleRequest(int request) {if (request >= 0 && request < 10) {System.out.println("ConcreteHandler1 处理了请求" + request);} else if (successor != null) {successor.HandleRequest(request);}}
}
public class ConcreteHandler2 extends Handler {public void HandleRequest(int request) {if (request >= 10 && request < 20) {System.out.println("ConcreteHandler2 处理了请求" + request);} else if (successor != null) {successor.HandleRequest(request);}}
}
public class ConcreteHandler3 extends Handler {public void HandleRequest(int request) {if (request >= 20 && request < 30) {System.out.println("ConcreteHandler3 处理了请求" + request);} else if (successor != null) {successor.HandleRequest(request);}}
}
public class Main {public static void main(String[] args) {Handler h1 = new ConcreteHandler1();Handler h2 = new ConcreteHandler2();Handler h3 = new ConcreteHandler3();h1.setSuccessor(h3);h3.setSuccessor(h2);int[] requests = {1, 2, 3, 11, 12, 13, 21, 22, 23, 99};for (int request : requests) {h1.HandleRequest(request);}}
}
拓展思路
- 弱化了发出请求的人和处理请求的人之间的关系
- 可以动态的改变职责链。
- 在一定程度上会导致处理延迟。
相关设计模式
- Composite模式
Handler角色经常会使用Composite模式。 - Command模式
有时会使用Command模式向Handler角色发送请求。
满足的原则
- 开放封闭原则
推卸责任的 Chain of Responsibility模式相关推荐
- 设计模式学习笔记——责任链(Chain of Responsibility)模式
设计模式学习笔记--责任链(Chain of Responsibility)模式 @(设计模式)[设计模式, 责任链模式, chain of responsibility] 设计模式学习笔记责任链Ch ...
- Chain of Responsibility 模式-----推卸责任模式
>> ----- 当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任. 在这种情况下,我们可以考虑将多个对象组成一条职责链,然后按照它们的职责链上的顺序 ...
- 职责链( Chain of Responsibility)模式
职责链( Chain of Responsibility)模式 职责链模式动机(Motivation) ➢在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指 ...
- 责任链模式(Chain of Responsibility模式)
在现实生活中,一个事件需要经过多个对象处理是很常见的场景.例如,采购审批流程.请假流程等.公司员工请假,可批假的领导有部门负责人.副总经理.总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的 ...
- 行为模式之Chain of Responsibility模式
1.意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 2.适用性 在以下条件下使用Responsi ...
- java使命召唤_Java设计模式之从[使命召唤等游戏的任务提示]分析职责链(Chain Of Responsibility)模式...
我们在使命召唤.暗黑破坏神等游戏时,总会接到各种各样的游戏任务,如到某某地方解救某人,或者消灭某某地方的敌人等.当玩家进入到某一个地图(以下称之为游戏场景)时,我们就可以查看它的任务提示.在这个机制下 ...
- Chain of Responsibility模式——读书笔记
继承如下抽象类的一系列类 abstract class Handler { protected Handler next; Handler(Handler next) { this.next = ne ...
- Chain of Responsibility (责任链)模式
(一段时间没更新了,坚持了100天考研^^) 14.1 Chain of Responsibility (责任链)模式 "推卸责任" 有贬义的意思,但是有时候也需要 " ...
- 设计模式之略见一斑(Chain of Responsibility责任链模式)
设计模式 写道 面向对象开发人员通常希望明确和减少对象间的责任,从而降低对象之间的耦合程序.这样我们的系统更加容易修改,同时也可降低产生缺陷的风险.从某种程度上说,java语言本身能够帮助降低对象间的 ...
最新文章
- Windows IIS7 下安装配置 PHP7.0
- SWIG:SWIG的简介、安装、使用方法之详细攻略
- boost::math模块使用 Brent 方法求函数最小值的示例
- boost::contract模块没有宏实现base types的测试程序
- Open XML应用安全(2)OLE机制
- 想写Python爬虫?看这5个教程就行了!
- HDU - 1160 FatMouse's Speed(最长不下降子序列)
- 董明珠上榜中国杰出商界女性100
- mysqldump对mysql数据库的影响
- python3的spyder安装,python中spyder怎么安装
- 图像分类以及经典的分类模型
- Loser,除了努力你还会什么?
- 考研政治---马克思主义基本原理概论---绪论
- 大韩航空如何成为一流航空——等级文化与称呼的改变
- 开课吧java广告,开课吧Java面试题:虚引用与软引用和弱引用的区别
- python名片识别_基于Python的名片识别接口调用代码实例
- vlog 12110错误及解决
- 已配置好环境,在CMD中输入adb命令,还是提示“‘adb‘ 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法
- SAS:字符串常用函数简介
- 关于大数据技术的演讲_2020年大数据技术应用趋势与当前大数据技术实践反思...
热门文章
- 华为业绩继续逆势增长,给员工分红400亿
- bugku 不好用的CE WriteUp
- 飞书二开系列之创建测试企业与企业应用等准备工作(一)
- 图神经网络(GNN)的必读文章
- Windows XP 安装 MTP 驱动
- qq邮箱服务器接收和发送文件夹,将QQ邮箱打造成为你的邮箱总管-qq邮箱怎么发送文件夹...
- 10_SkyWalking
- 南加大的计算机科学与工程,南加州大学优势专业及优势专业排名(QS世界排名)...
- 企业为什么要先上ERP?
- 新买的笔记本如何安装计算机,新电脑买回来要怎么做【经验分享】