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代码调试的几种方法总结
Apr 15 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
python读取二进制mnist实例详解
May 31 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
使用tensorflow实现AlexNet
Nov 20 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
基于PyTorch中view的用法说明
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
php实现的验证码文件类实例
2015/06/18 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
python创建n行m列数组示例
2019/12/02 Python
Python语言异常处理测试过程解析
2020/01/08 Python
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
个人近期表现材料
2014/02/11 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
导游词之山东八大关
2019/12/18 职场文书
python基于turtle绘制几何图形
2021/06/15 Python
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript