Python设计模式之职责链模式原理与用法实例分析


Posted in Python onJanuary 11, 2019

本文实例讲述了Python设计模式之职责链模式原理与用法。分享给大家供大家参考,具体如下:

职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并沿着这条链传递请求直到被处理

下面是一个设计模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——职责链模式
职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系。将对象连成链并沿着这条链传递请求直到被处理
(在调用时要定义好哪个实例是哪个实例的职责上一级)请求沿着定义的链条传递给可以处理请求的对象
"""
#抽象一个处理类
class Handle(object):
  def __init__(self):
    self.successor = ''
  def setsuccessor(self, successor):
    self.successor = successor
  def handle_request(self,request):
    pass
# 具体处理者类1
class ConcreteHandle1(Handle):
  def handle_request(self,request):
    if request>0 and request<=10:
      print "ConcreteHandle1处理请求 ",request
    else:
      self.successor.handle_request(request)
# 具体处理者类2
class ConcreteHandle2(Handle):
  def handle_request(self,request):
    if request>10 and request<=20:
      print "ConcreteHandle2处理请求 ",request
    else:
      self.successor.handle_request(request)
if __name__=="__main__":
  c1 = ConcreteHandle1()
  c2 = ConcreteHandle2()
  c1.setsuccessor(c2)
  for i in range(6,15,2):
    c1.handle_request(i)

运行结果:

Python设计模式之职责链模式原理与用法实例分析

上面类的设计如下图:

Python设计模式之职责链模式原理与用法实例分析

接收者和发送者都没有对方的明确信息,且链中的对象自己并不知道链的结构,职责链可简化对象的相互连接,他们仅需保持一个指向后继者的引用,而不需要保持他所有候选接收者的引用,大大降低了耦合度,可以随时增加或修改处理一个请求的结构

但是要当心,一个请求沿着职责链到达末端,都没有正确的配置而得不到处理的情况

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
零基础写python爬虫之抓取糗事百科代码分享
Nov 06 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Python批量更改文件名的实现方法
Oct 29 Python
Python3中exp()函数用法分析
Feb 19 Python
一文了解Python并发编程的工程实现方法
May 31 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python实现扫码工具的示例代码
Oct 09 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python re.match()用法相关示例
Jan 27 Python
django学习之ajax post传参的2种格式实例
May 14 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 #Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 #Python
Python实现批量执行同目录下的py文件方法
Jan 11 #Python
python多个模块py文件的数据共享实例
Jan 11 #Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 #Python
详解从Django Rest Framework响应中删除空字段
Jan 11 #Python
python对列进行平移变换的方法(shift)
Jan 10 #Python
You might like
PHP使用pcntl_fork实现多进程下载图片的方法
2014/12/16 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
php实现用户登陆简单实例
2017/04/04 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
动态加载js文件 document.createElement
2006/10/14 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
jupyter安装小结
2016/03/13 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
基于python socketserver框架全面解析
2017/09/21 Python
详解flask表单提交的两种方式
2018/07/21 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
道歉的话语大全
2015/05/12 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis