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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Django日志及中间件模块应用案例
Sep 10 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
世界收音机发展史
2021/03/01 无线电
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python获取apk文件URL地址实例
2013/11/01 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python写入文件自动换行问题的方法
2019/07/05 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
社区戒毒工作方案
2014/06/04 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
实施意见格式范本
2015/06/05 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
Python实现对齐打印 format函数的用法
2022/04/28 Python
A22国内电台短波广播频率表
2022/05/10 无线电