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入门教程
Feb 08 Python
python使用socket远程连接错误处理方法
Apr 29 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
numpy.where() 用法详解
May 27 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
解决python便携版无法直接运行py文件的问题
Sep 01 Python
详解Python中的路径问题
Sep 02 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 Python
M1芯片安装python3.9.1的实现
Feb 02 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
Yii使用技巧大汇总
2015/12/29 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
vue实现动态按钮功能
2019/05/13 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
Python实现微信机器人的方法
2019/09/06 Python
深入了解python列表(LIST)
2020/06/08 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
python中的插入排序的简单用法
2021/01/19 Python
中国电视购物:快乐购
2017/02/04 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
银行实习生自我鉴定范文
2013/09/19 职场文书
中英文自我评价语句
2013/12/20 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
介绍信怎么写
2015/05/05 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js