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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 Python
python实现文本文件合并
Dec 29 Python
Python类属性的延迟计算
Oct 22 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
Django框架搭建的简易图书信息网站案例
May 25 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
Jul 03 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
如何用Python搭建gRPC服务
Jun 30 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 高手之路(三)
2006/10/09 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
JavaScript 垃圾回收机制分析
2013/10/10 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
python3访问sina首页中文的处理方法
2014/02/24 Python
Python中logging模块的用法实例
2014/09/29 Python
python使用udp实现聊天器功能
2018/12/10 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python可以实现栈的结构吗
2020/05/27 Python
python 从list中随机取值的方法
2020/11/16 Python
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
2014年小学植树节活动方案
2014/03/02 职场文书
1亿有多大教学反思
2014/05/01 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
工作散漫检讨书
2014/09/16 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
2015年妇女工作总结
2015/05/14 职场文书
python异常中else的实例用法
2021/06/15 Python
python turtle绘图命令及案例
2021/11/23 Python
mysql中整数数据类型tinyint详解
2021/12/06 MySQL