经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Chain of Responsibility 职责链模式
来源:cnblogs  作者:大师兄石头  时间:2021/2/18 15:34:38  对本文有异议

>>返回《C#常用设计模式》

1. 简介

  • 定义
    • 很多对象由每一个对象对其下家的引用而连接起来形成一条链。
    • 请求在这个链上传递,直到链上的某一个对象决定处理此请求。
    • 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
    • 责任链可能是一条直线、一个环链或者一个树结构的一部分
  • 类图

2. 示例

  1. public abstract class Handler {
  2. /**
  3. * 持有后继的责任对象
  4. */
  5. protected Handler successor;
  6. /**
  7. * 示意处理请求的方法,虽然这个示意方法是没有传入参数的
  8. * 但实际是可以传入参数的,根据具体需要来选择是否传递参数
  9. */
  10. public abstract void handleRequest();
  11. /**
  12. * 取值方法
  13. */
  14. public Handler getSuccessor() {
  15. return successor;
  16. }
  17. /**
  18. * 赋值方法,设置后继的责任对象
  19. */
  20. public void setSuccessor(Handler successor) {
  21. this.successor = successor;
  22. }
  23. }
  24. public class ConcreteHandler extends Handler {
  25. /**
  26. * 处理方法,调用此方法处理请求
  27. */
  28. public override void handleRequest() {
  29. /**
  30. * 判断是否有后继的责任对象
  31. * 如果有,就转发请求给后继的责任对象
  32. * 如果没有,则处理请求
  33. */
  34. if(getSuccessor() != null)
  35. {
  36. Console.WriteLine("放过请求");
  37. getSuccessor().handleRequest();
  38. }else
  39. {
  40. Console.WriteLine("处理请求");
  41. }
  42. }
  43. }
  44. public class Client {
  45. public static void main(String[] args) {
  46. //组装责任链
  47. Handler handler1 = new ConcreteHandler();
  48. Handler handler2 = new ConcreteHandler();
  49. handler1.setSuccessor(handler2);
  50. //提交请求
  51. handler1.handleRequest();
  52. }
  53. }

原文链接:http://www.cnblogs.com/BigBrotherStone/p/Chain-of-Responsibility.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号