1. 责任链模式(Chain of Responsibility)介绍

UML类图

定义

使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

责任链模式的结构

责任链模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成:

  • 抽象处理类:抽象处理类中主要包含一个指向下一处理类的成员变量nextHandler和一个处理请求的方法handRequest,handRequest方法的主要主要思想是,如果满足处理的条件,则有本处理类来进行处理,否则由nextHandler来处理。
  • 具体处理类:具体处理类主要是对具体的处理逻辑和处理的适用条件进行实现。

2. 示例

  • 了解了责任链模式的大体思想之后,再看代码就比较好理解了。
  • 下面代码中Level类是模拟判定条件;Request,Response分别对应请求和响应;抽象类Handler中主要进行条件的判断,这里模拟一个处理等级,只有处理类的处理等级高于Request的等级才能处理,否则交给下一个处理者处理。在Client类中设置好链的前后执行关系,执行时将请求交给第一个处理类,这就是责任链模式。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-'''Chain of Responsibility Pattern with Python Code
'''from abc import abstractmethod, ABCMetaclass Level(object):num = 0def __init__(self, num):self.num = numdef above(self, level):if(self.num >= level.num):return Truereturn Falseclass Request(object):level = Nonedef __init__(self, level):self.level = leveldef getLevel(self):return self.levelclass Response(object):passclass Handler(metaclass=ABCMeta):nextHandler = Nonedef handleRequest(self, request):response = Noneif self.getHandlerLevel().above(request.getLevel()):response = self.response(request);else:if self.nextHandler != None:response = self.nextHandler.handleRequest(request)else:print("deny access")return responsedef setNextHandler(self, handler):self.nextHandler = handler@abstractmethoddef getHandlerLevel(self):pass@abstractmethoddef response(self, request):passclass ConcreteHandler1(Handler):def getHandlerLevel(self):return Level(10)def response(self, request):print("Level 1 access")return Response()class ConcreteHandler2(Handler):def getHandlerLevel(self):return Level(100)def response(self, request):print("Level 2 access")return Response()class ConcreteHandler3(Handler):def getHandlerLevel(self):return Level(1000)def response(self, request):print("Level 3 access")return Response()class Client(object):def main(self):handler1 = ConcreteHandler1()handler2 = ConcreteHandler2()handler3 = ConcreteHandler3()handler1.setNextHandler(handler2)handler2.setNextHandler(handler3)response = handler1.handleRequest(Request(Level(500)))if __name__ == "__main__":Client().main()

输出:

# ./ChainofResponsibility.py
Level 3 access

参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/chain-responsibility-pattern.html
https://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html

python设计模式13-责任链模式相关推荐

  1. php设计模式之责任链模式

    php设计模式之责任链模式 实际问题 你的论坛有举报功能,版主能解决粗口方面的举报,警察能解决严重一点的黄赌毒方面的举报,更严重的反政府的举报就需要由国安局来完成. 职场中每个人都有直属的上级,如果到 ...

  2. 轻松学习Java设计模式之责任链模式

    我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...

  3. 走穿java23种设计模式-15责任链模式详解

    走穿java23种设计模式-15责任链模式详解 责任链模式是一种常见的行为模式. 一.责任链模式的现实场景 习伟过生日邀请了很多朋友到KTV一起庆祝,为了增加欢乐的气氛,习伟建议大家一起玩击鼓传花的游 ...

  4. 乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern)

    原文:乐在其中设计模式(C#) - 责任链模式(Chain of Responsibility Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 责任链模式(Chain of ...

  5. 手撸设计模式之-责任链模式

    手撸设计模式之-责任链模式 一 .责任链模式介绍 1.1 定义 1.2 责任链模式UML结构图 1.3 责任链模式结构详细 1.3 用例代码实现 二.责任链模式应用场景: 2.1 场景概述 2.2 场 ...

  6. 软件设计模式之责任链模式实验

    软件设计模式之责任链模式实验 一.实验目的 掌握软件责任链模式中的命令模式,能够用责任链模式编写程序,解决实际问题. 二.实验内容与要求 内容:某小学老师指定班里的三位学生收寒假作业,三位学生分别负责 ...

  7. Java设计模式之责任链模式(二)

    所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...

  8. Java设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

  9. Java设计模式系列--责任链模式(应用)

    原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...

  10. JAVA设计模式之责任链模式(职责链模式)

    转自JAVA设计模式之责任链模式(职责链模式)​​​​​​​ 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...

最新文章

  1. android学习笔记55——ContentProvider_2
  2. 以cisco 3550为例介绍IOS的恢复方法:
  3. nginx生成ssl证书
  4. .NET或将引入类型类和扩展
  5. 【转】Postman系列二:Postman中get接口实战讲解(接口测试介绍,接口测试流程,头域操作)
  6. Facebook史上最严重宕机:互联网企业是时候重新审视架构了?
  7. 百度编辑器UEditor源码模式下过滤div/style等html标签
  8. python opencv保存图片_OpenCV Python 保存图片
  9. ubuntu 字符集与乱码
  10. rdcman汉化_Remote Desktop Organizer – 管理组织远程桌面 - 小众软件
  11. 服务器远程关机软件,实现远程关机需要哪些步骤?向日葵怎么实现远程关机控制?...
  12. Android 蓝牙HID协议(基于BR蓝牙)连接流程分析--framework-jni-btif-bta-btm-hci -- 全网最详细(一)
  13. 高情商的人都在这样表现汇报工作
  14. 新茶饮加速“去泡沫”
  15. 我们进入微服务世界的旅程-以及我们从中学到的东西。
  16. Linux——MySQL高可用-PXC架构
  17. 计算机应用基本技能试题,计算机应用基本技能.doc
  18. 指针实现函数返回多个值
  19. GPRSsim800c
  20. std::complex类conj

热门文章

  1. linux系统安装与初用
  2. Exploit开发系列教程-Exploitme2 (Stack cookies SEH)
  3. cocos2dx中关于Action动作的相关API的具体介绍
  4. spring boot几个初始配置文件
  5. java学习:理解final
  6. nmealib解析-----(1)
  7. google站长管理工具
  8. 神级代码编辑软件(Sublime Text 3) v3.3114 汉化特别版
  9. docker-ovs遇到的问题以及解决办法
  10. MapReduce InputFormat之FileInputFormat