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中的多重继承实例讲解
Sep 28 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
Python正则表达式和元字符详解
Nov 29 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
pymysql 开启调试模式的实现
Sep 24 Python
jupyter notebook 多环境conda kernel配置方式
Apr 10 Python
python实现Thrift服务端的方法
Apr 20 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 form 表单传参明细研究
2009/07/17 PHP
php将数据库导出成excel的方法
2010/05/07 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
javascript 获取图片颜色
2009/04/05 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
2016/10/13 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
python文件与目录操作实例详解
2016/02/22 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
python创建学生成绩管理系统
2019/11/22 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
班委竞选演讲稿
2014/04/28 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
申报优秀教师材料
2014/12/16 职场文书
单位委托函范文
2015/01/29 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
幼儿园国培研修日志
2015/11/13 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server