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中实现结构相似的函数调用方法
Mar 10 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
Python提取网页中超链接的方法
Sep 18 Python
python中sys.argv函数精简概括
Jul 08 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
简单了解python的break、continue、pass
Jul 08 Python
python redis连接 有序集合去重的代码
Aug 04 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
妙用itchat! python实现久坐提醒功能
Nov 25 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 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
星际争霸中的热键
2020/03/04 星际争霸
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python中验证码连通域分割的方法详解
2018/06/04 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
安装PyInstaller失败问题解决
2019/12/14 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
门诊手术室工作制度
2014/01/30 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
上班迟到检讨书
2014/09/15 职场文书
单位车辆管理制度
2015/08/05 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Win11更新失败并提示0xc1900101
2022/04/19 数码科技
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers