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中的__new__与__init__魔术方法理解笔记
Nov 08 Python
python中zip和unzip数据的方法
May 27 Python
Python变量赋值的秘密分享
Apr 03 Python
python 读入多行数据的实例
Apr 19 Python
Python贪心算法实例小结
Apr 22 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
python 设置输出图像的像素大小方法
Jul 04 Python
Python with语句和过程抽取思想
Dec 23 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 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
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
JavaScript 判断浏览器是否支持SVG的代码
2013/03/21 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python友情链接检查方法
2015/07/08 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
2014年科技工作总结
2014/11/26 职场文书
办公室岗位职责范本
2015/04/11 职场文书
英文辞职信范文
2015/05/13 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python
Redis命令处理过程源码解析
2022/02/12 Redis
如何利用python实现Simhash算法
2022/06/28 Python