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生成随机MAC地址
Mar 10 Python
python操作ie登陆土豆网的方法
May 09 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
Python实现控制台进度条功能
Jan 04 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
python实现ID3决策树算法
Dec 20 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
python实现WebSocket服务端过程解析
Oct 18 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Python序列化与反序列化相关知识总结
Jun 08 Python
python实现双向链表原理
May 25 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/11/25 PHP
安装APACHE
2007/01/15 PHP
PHP 变量定义和变量替换的方法
2009/07/30 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
Python中的random()方法的使用介绍
2015/05/15 Python
python验证码识别的实例详解
2016/09/09 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
John Varvatos官方网站:设计师男士时装
2017/02/08 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
英文版区域经理求职信
2013/10/23 职场文书
教师自荐信范文
2013/12/09 职场文书
企业管理部经理岗位职责
2013/12/24 职场文书
2013年军训通讯稿
2014/02/05 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
农业开发项目建议书
2014/05/16 职场文书
2014年教师工作总结
2014/11/10 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
CSS 圆形进度栏
2021/04/06 HTML / CSS
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL