24 设计模式教学课件_第1页
24 设计模式教学课件_第2页
24 设计模式教学课件_第3页
24 设计模式教学课件_第4页
24 设计模式教学课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

职责链 ChainofResponsibility 模式 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏 在酒宴上宾客依次坐定位置 由一人击鼓 击鼓的地方与传花的地方是分开的 以示公正 开始击鼓时 花束就开始依次传递 鼓声一落 如果花束在某人手中 则该人就得饮酒 击鼓传花便是职责链模式的应用 职责链可能是一条直线 一个环链或者一个树结构的一部分 实例 公司申请聚餐费用公司申请差旅费用 问题 聚餐费用申请的处理流程是可能会变动的各个处理环节的业务处理也是会变动的 问题抽象 客户端发出一个请求 会有很多对象都可以来处理这个请求 而且不同对象的处理逻辑是不一样的 对于客户端而言 无所谓谁来处理 反正有对象处理就可以了 而且在上述处理中 还希望处理流程是可以灵活变动的 而处理请求的对象需要能方便地修改或者是被替换掉 以适应新的业务功能的需要 解决方案 职责链 ChainofResponsibility 模式使多个对象都有机会处理请求 从而避免请求的发送者和接收者之间的耦合关系 将这个对象连成一条链 并沿着这条链传递该请求 直到有一个对象处理它为止 解决问题的思路 动态构建流程步骤 这样随时可以重新组合出新的流程来 抽象处理者 Handler 角色 定义出一个处理请求的接口 如果需要 接口可以定义出一个方法 以设定和返回对下家的引用 这个角色通常由一个抽象类或接口实现 具体处理者 ConcreteHandler 角色 具体处理者接到请求后 可以选择将请求处理掉 或者将请求传给下家 由于具体处理者持有对下家的引用 因此 如果需要 具体处理者可以访问下家 处理过程 ChainofResponsibility模式中ConcreteHandler将自己的后继对象 向下传递消息的对象 记录在自己的后继表中 当一个请求到来时 ConcreteHandler会先检查看自己有没有匹配的处理程序 如果有就自己处理 否则传递给它的后继 示意代码 abstractclassHandler protectedHandlersuccessor publicvoidSetSuccessor Handlersuccessor this successor successor publicabstractvoidHandleRequest intrequest classConcreteHandler1 Handler publicoverridevoidHandleRequest intrequest if request 0 classConcreteHandler2 Handler publicoverridevoidHandleRequest intrequest if request 10 classConcreteHandler3 Handler publicoverridevoidHandleRequest intrequest if request 20 客户端 classProgram staticvoidMain string args Handlerh1 newConcreteHandler1 Handlerh2 newConcreteHandler2 Handlerh3 newConcreteHandler3 h1 SetSuccessor h2 h2 SetSuccessor h3 int requests 2 5 14 22 18 3 27 20 foreach intrequestinrequests h1 HandleRequest request Console Read 在客户端设置关联 责任链模式降低了请求的发送端和接收端之间的耦合 使多个对象都有机会处理这个请求 一个链可以是一条线 一个树 也可以是一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论