




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计模式分解java九 行为模式 ChainofResponsibility 职责链 定义 ChainofResponsibility CoR 是用一系列类 classes 试图处理一个请求request 这些类之间是一个松散的耦合 唯一共同点是在他们之间传递request 也就是说 来了一个请求 A类先处理 如果没有处理 就传递到B类处理 如果没有处理 就传递到C类处理 就这样象一个链条 chain 一样传递下去 如何使用 虽然这一段是如何使用CoR 但是也是演示什么是CoR 有一个Handler接口 publicinterfaceHandler publicvoidhandleRequest 这是一个处理request的事例 如果有多种request 比如请求帮助请求打印或请求格式化 最先想到的解决方案是 在接口中增加多个请求 publicinterfaceHandler publicvoidhandleHelp publicvoidhandlePrint publicvoidhandleFormat 具体是一段实现接口Handler代码 publicclassConcreteHandlerimplementsHandler privateHandlersuccessor publicConcreteHandler Handlersuccessor this successor successor publicvoidhandleHelp 具体处理请求Help的代码 publicvoidhandlePrint 如果是print转去处理Printsuccessor handlePrint publicvoidhandleFormat 如果是Format转去处理formatsuccessor handleFormat 一共有三个这样的具体实现类 上面是处理help 还有处理Print处理Format这大概是我们最常用的编程思路 虽然思路简单明了 但是有一个扩展问题 如果我们需要再增加一个请求request种类 需要修改接口及其每一个实现 第二方案 将每种request都变成一个接口 因此我们有以下代码 publicinterfaceHelpHandler publicvoidhandleHelp publicinterfacePrintHandler publicvoidhandlePrint publicinterfaceFormatHandler publicvoidhandleFormat publicclassConcreteHandlerimplementsHelpHandler PrintHandler FormatHandlet privateHelpHandlerhelpSuccessor privatePrintHandlerprintSuccessor privateFormatHandlerformatSuccessor publicConcreteHandler HelpHandlerhelpSuccessor PrintHandlerprintSuccessor FormatHandlerformatSuccessor this helpSuccessor helpSuccessor this printSuccessor printSuccessor this formatSuccessor formatSuccessor publicvoidhandleHelp publicvoidhandlePrint this printSuccessor printSuccessor publicvoidhandleFormat this formatSuccessor formatSuccessor 这个办法在增加新的请求request情况下 只是节省了接口的修改量 接口实现ConcreteHandler还需要修改 而且代码显然不简单美丽 解决方案3 在Handler接口中只使用一个参数化方法 publicinterfaceHandler publicvoidhandleRequest Stringrequest 那么Handler实现代码如下 publicclassConcreteHandlerimplementsHandler privateHandlersuccessor publicConcreteHandler Handlersuccessor this successor successor publicvoidhandleRequest Stringrequest if request equals Help 这里是处理Help的具体代码 else 传递到下一个successor handle request 这里先假设request是String类型 如果不是怎么办 当然我们可以创建一个专门类Request最后解决方案 接口Handler的代码如下 publicinterfaceHandler publicvoidhandleRequest Requestrequest Request类的定义 publicclassRequest privateStringtype publicRequest Stringtype this type type publicStringgetType returntype publicvoidexecute request真正具体行为代码 那么Handler实现代码如下 publicclassConcreteHandlerimplementsHandler privateHandlersuccessor publicConcreteHandler Handlersuccessor this successor successor publicvoidhandleRequest Requestrequest if requestinstanceofHelpRequest 这里是处理Help的具体代码 elseif requestinstanceofPrintRequst request execute else 传递到下一个successor handle request 这个解决方案就是CoR 在一个链上 都有相应职责的类 因此叫ChainofResponsibility CoR的优点 因为无法预知来自外界的请求是属于哪种类型 每个类如果碰到它不能处理的请求只要放弃就可以 无疑这降低了类之间的耦合性 缺点是效率低 因为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源充电桩质量追溯体系创新与实践
- 2025年文旅融合乡村文化旅游产业投资风险预警与应对报告
- 2025年储能电站热管理技术创新及节能效果评估报告
- 特种文化产业项目买卖合同文化保护与市场拓展
- 2025科技公司合作合同模板
- 环保产业特殊人才招聘及绿色技术合作合同
- 国际离婚协议书翻译与全球法律效力确认合同
- 互联网企业移动应用数据安全与商业秘密保密合同样本
- 新型生物制剂全球销售代理权许可合同范本
- 互联网金融服务门面房屋租赁及业务合作协议
- TGXAS-松阔混交林培育技术规程编制说明
- 幼儿园的食品安全工作计划
- (新教科版)科学五年级上册全册教学反思
- 职业技术学院《老年常见疾病预防与照护》课程标准
- 2025年高考语文备考之语言文字运用汇编(2)含答案
- 什么比猎豹的速度更快课件
- GB/T 30306-2024家用和类似用途饮用水处理滤芯
- 《仓储与配送实务》教案-17物流高技
- 快递转让合同
- JBT 7946.2-2017 铸造铝合金金相 第2部分:铸造铝硅合金过烧
- 信息系统操作与维护管理制度
评论
0/150
提交评论