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 相关文章推荐
mac系统安装Python3初体验
Jan 02 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
Python内置random模块生成随机数的方法
May 31 Python
将python运行结果保存至本地文件中的示例讲解
Jul 11 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
python向图片里添加文字
Nov 26 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
python中PyQuery库用法分享
Jan 15 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 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 中执行排序与 MySQL 中排序
2009/04/21 PHP
PHP数组及条件,循环语句学习
2012/11/11 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jcrop基本参数一览
2013/07/16 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
简化Python的Django框架代码的一些示例
2015/04/20 Python
Python实现身份证号码解析
2015/09/01 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python实现Floyd算法
2018/01/03 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
python圣诞树编写实例详解
2020/02/13 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
毕业生求职自荐信怎么写
2014/01/08 职场文书
《春雨》教学反思
2014/04/24 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python