很多同学学Python一段时间了,但是总感觉自己的写代码不好维护,或者时间长了一旦增加需求或者需要扩展功能,发现自己写的代码就是一团糟!尽管也代码不断的重构了,好像也遵循了PEP8的风格,为啥代码量一旦大了就乱了呢,因为你没有用武林秘籍“设计模式”呀。

由于你没有用一些设计模式去优化你的代码,所以导致很多小伙伴只能把自己的代码重写。这次我们通过请假条来讲讲设计模式-"职责模式"

什么是职责模式

比如我们要请假,我们一般都是写个请假条,然后提交给系统!系统会自动根据你的请假的情况,找对应的主管去审批。请假条处理的流程是一环接一环的,就像一个链条一样,所有处理请假条的人构成了一个职责链条。

职责模式:

职责模式的精妙之处在于把请求者和接受者解耦了,就是做了分层处理!请求者不知道是谁处理请假条,不需要知道具体的业务逻辑和处理请假条的链上有多少人,它只管提交,这样的话系统的灵活性和扩展性就非常好,不信我们看实战案例。

实战案例

老板让程序员小李去设计一个请假系统,应该怎么设计呢,小李想了想就用上面的职责模式吧,二话不说先画一个UML图,把业务逻辑关系设计出来。

1).设计请假人类

我们把请假人抽象为一个对象,里面属性肯定是要有名字,请多少天,请假理由等等.所以Person接口的时候我们留了三个参数(name,dayoff,reason)。

这个类里面最关键的是setLeader()和request()函数:

setLeader的目的设置请假的提交给主管,但是具体是哪一级别的主管你不用管。

request的目的是把请假条扔出去,至于这个请假条哪一个级别的主管来批你也不用管,因为用handleRequest()这个函数来处理。

2).设计主管类

主管的角色有很多种,比如小组长,部门经理,部门总监,公司老总,HR, 行政总监等等。我们把这些人都抽象提取为一个基类叫主管类。

这个Manager类是基类,主要是处理get和set NextHandler.就是请假条在一个链条上,需要有一个一层一层提交的关系,比如组长的下一层nextHandler是部门经理,部门经理的下一层处理是公司老板。

3).具体的几个角色类

比如我们设计这个请假系统里面有TeamLeader,DeptMaanger,Director等等。

每个的权利不一样,比如:

请假2天内的又TeamLeader审批

请假2-10天有部门经理申请

请假10-22天的有研发总监申请

我们举一个例子,比如小组长这个类。它主要是重写了handlerRequest这个类。(大家注意看Pycharm左边有一个蓝色的小圆圈,表示重写了父类的函数)

DeptMaanger也是类似的,主要在与审批的天数不一样。

HR的类主要是处理登记备案:

测试一下模型

经过了上面的类的重重设计,我们的模型应该可以运行了。我们用几个请假条来测一下看看:

>>

Leo 申请请假2天,请假理由:参加谷歌大会

同意Leo,请假。签字人:Eric,(小组长)

请假申请已经审核,情况属实!已备案处理.处理人Tina:行政总监

--------------------------------------------------

Susan 申请请假10天,请假理由:去欧洲旅游,还要去日本泡温泉

同意Susan,请假。签字人:Leo,(研发经理)

请假申请已经审核,情况属实!已备案处理.处理人Tina:行政总监

--------------------------------------------------

Lili 申请请假22天,请假理由:生病休息

同意Lili,请假。签字人:老王,(公司老板)

请假申请已经审核,情况属实!已备案处理.处理人Tina:行政总监

学习设计模式的过程是非常痛苦的,因为不是立竿见影,有的时候学了会忘,因为是练习心法,会比修炼Python技巧招式要难的很多。

需要反反复复的练习,拆解,合成,再拆解,要好好研究,尤其是从菜鸟进阶为高手,代码的架构能力很重要。

长按二维码关注

公众号「跟我学Python」

你点一个在看

python 请假审批系统_菜鸟也要懂点设计模式|用Python设计一个请假模式相关推荐

  1. python 请假审批系统_基于工作流的请假审批系统设计与实现

    标[ ].系统结合单位的实际工作情况,应用工作流技术来实现无纸化请假,提供效率, 降低成本.文章以学生请假审批系统的详细设计与实现为背景,介绍了工作流技术的实现方 法. 1 系统需求分析 本系统主要是 ...

  2. python股票分析系统_熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的非常甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!但是突然想起年初还有几万块在股市里面 ...

  3. python股票全套系统_熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的很是甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!可是突然想起年初还有几万块在股市里面 ...

  4. python实现秒杀系统_双十一买买买,教你用Python实现秒杀系统

    原标题:双十一买买买,教你用Python实现秒杀系统 简书博客地址: https://www.jianshu.com/u/8f4d80000566 架构搭建是重点,代码或语言实现较简单. 本篇用pyt ...

  5. python开发bs系统_一文告诉你,如何使用Python构建一个“谷歌搜索”系统|内附代码...

    来源 | hackernoon 编译 | 武明利 责编 | Carol 在这篇文章中,我将向您展示如何使用Python构建自己的答案查找系统.基本上,这种自动化可以从图片中找到多项选择题的答案. 有一 ...

  6. python写股票指标_一文看懂KDJ指标及Python实现

    KDJ指标又叫随机指标,是一种非常实用的技术分析指标,被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具. 随机指标KDJ是根据统计学原理,在一个特定的周期(常为9日.9周等),以 ...

  7. java-net-php-python-77ssm学生请假审批系统计算机毕业设计程序

    java-net-php-python-77ssm学生请假审批系统计算机毕业设计程序 java-net-php-python-77ssm学生请假审批系统计算机毕业设计程序 本源码技术栈: 项目架构:B ...

  8. Smartbi企业流程审批系统_流程审批软件推荐

    日常工作的各种办公场景中经常需要使用到流程,并且不同部门不同工作内容的流程都会有不同,思迈特软件Smartbi流程审批系统提供一整套完备的流程模块,可以实现工作中流程的灵活审批及动态流转. 学习审核流 ...

  9. python是什么系统_最齐全、最系统的python教程

    python教程(后面有彩蛋) python教程目录 学python都用来干嘛的? 主要就是"简单啊"."收入高啊"."人生苦短,我用Python&q ...

最新文章

  1. IIS日志清理CMD版,VBS版,JS版,WSH版
  2. 重读经典:完全解析特征学习大杀器ResNet
  3. .net数据根据字段进行分类(linq语句)
  4. 超有用的 java面试题
  5. nodejs——URL 基础API
  6. python基础知识-8-三元和一行代码(推导式)
  7. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
  8. 使用ODAC调用ORACLE的自定义函数和存储过程
  9. 马斯克再创历史!人类首个商业载人飞船发射成功:移民火星又近一步
  10. e - 数据结构实验之查找五:平方之哈希表_面试中常被问到的Hash表,你了解吗
  11. apache点NET环境
  12. linux驱动编写(虚拟字符设备编写)
  13. 谷歌大脑AutoML最新进展:不断进化的阿米巴网络
  14. 基于16QAM调制的OFDM系统仿真实现
  15. VC和gcc在保证功能static对线程安全的差异变量
  16. 乱码(四): 撬动地球的支点
  17. 游戏制作大师RPGMAKER MV/MZ安装DLC的方法
  18. linux音频设备id,ubuntu下提取DSDT SSDT和声卡ID _ 黑苹果乐园
  19. 计算机应用选购哪些电脑,购买电脑有哪些要注意的
  20. php throw,PHP的Try, throw 和 catch简单用法

热门文章

  1. 【完全信息静态博弈-Nash均衡的特性】
  2. 为intent添加FLAG_EXCLUDE_STOPPED_PACKAGES标记
  3. 高质量文章导航-持续更新中
  4. CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout
  5. 将自定义程序写入U盘引导区,并在真机执行
  6. [解读] GTN: Generative Teaching Networks
  7. Java程序的编辑、编译、运行
  8. 示波器波形保存至PC端的设置
  9. [单片机框架][bsp层][cx32l003][bsp_adc] ADC配置和使用
  10. 分布式监控:zabbix trapper方式监控