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 相关文章推荐
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
tensorflow建立一个简单的神经网络的方法
Feb 10 Python
django启动uwsgi报错的解决方法
Apr 08 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
python爬取酷狗音乐排行榜
Feb 20 Python
python输出pdf文档的实例
Feb 13 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
Python lambda表达式原理及用法解析
Aug 18 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
chrome调试javascript详解
2015/10/21 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
利用Python开发实现简单的记事本
2016/11/15 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
Python使用扩展库pywin32实现批量文档打印实例
2020/04/09 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
Python同时处理多个异常的方法
2020/07/28 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
小学毕业感言50字
2014/02/16 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
cf战队收人广告词
2014/03/14 职场文书
服务之星事迹材料
2014/05/03 职场文书
收银员岗位职责
2015/02/03 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis