菜鸟也要懂点设计模式|用Python设计一个请假模式
作者 | Leoxin
来源 | 菜鸟学Python
很多同学学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技巧招式要难的很多。
需要反反复复的练习,拆解,合成,再拆解,要好好研究,尤其是从菜鸟进阶为高手,代码的架构能力很重要。
—————————————
往期精彩:
小红书,“黄”了
苹果谷歌双双被曝,你的手机正在窃听你的生活
遇事不决赖毛子,美国这次打算封杀变脸APP
菜鸟也要懂点设计模式|用Python设计一个请假模式相关推荐
- python 请假审批系统_菜鸟也要懂点设计模式|用Python设计一个请假模式
很多同学学Python一段时间了,但是总感觉自己的写代码不好维护,或者时间长了一旦增加需求或者需要扩展功能,发现自己写的代码就是一团糟!尽管也代码不断的重构了,好像也遵循了PEP8的风格,为啥代码量一 ...
- python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
原标题:菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记 每个月都有各种各样的开销,不当家不知道柴米贵呀!柴米油盐酱醋茶样样都要开销,吃的穿的,各种开销,每个月都没有啥结余,小编月初是富人,月底 ...
- 设计模式 with Python 10:状态模式
设计模式 with Python 10:状态模式 如果你接触过UML的状态图,应该会对状态图或者状态机有所了解,我们今天讨论的状态模式就是这种设计的落地方案. 和之前的讲解一样,我们从一个具体案例&q ...
- 设计模式 with Python 9:迭代器模式
设计模式 with Python 9:迭代器模式 我们在初学编程语言的时候,除了在诸如变量.控制流程.面向对象这些编程基础内容上会话费大量精力以外,编程语言的内建集合(Collection)或者说内建 ...
- python界面设计-手把手教你用Python设计一个简单的命令行界面
原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...
- python经典小游戏-用Python设计一个经典小游戏:猜大小
码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...
- 20行python代码的入门级小游戏-用Python设计一个经典小游戏
本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...
- python经典小游戏-用Python设计一个经典小游戏
本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...
- python 代码行数统计工具_使用Python设计一个代码统计工具
问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 pytho ...
- python股票预测的意义是什么_股票预测python,python 设计一个名为Stock的类来表示...
python 设计一个名为Stock的类来表示一个公司的股票? class Stock(): def __init__(self): self.__no = "" self.__n ...
最新文章
- NDK JNI 安装与配置(一)(UBUNTU16.04 )
- mysql insert concat_MySQL常用内置函数说明+concat+insert(str,m,n,inser_str)+week(now())+ | 学步园...
- 每日一皮:有一天某程序员去买肉,要了一公斤...
- 四.MongoDB 概念解析
- 如何在Win7以上环境使用VC++6
- Android socket 学习记录 之 执行new socket(ip, port)程序崩溃
- python2异步编程_Python 异步编程入门
- linux ubuntu u盘 dd,ubuntu安装到U盘--kvm+dd 定制篇
- dubbo : Invalid multicast address 127.0.0.1, scope: 224.0.0.0 - 239.255.255.255
- 威联通架设php网站_如何架设PHP服务器
- mysql除了两列其他都选_从MySQL的两列中选择不同的名称,然后在单列中显示结果...
- 王者荣耀交流协会final发布-第一次scrum立会
- Win10系统蓝屏错误DPC怎么解决【系统天地】
- Luarocks: 安装 lyaml 库
- MySQL聚集索引与非聚集索引相关总结
- 9.ansible变量之fact
- 进程间通讯SendMessage
- 计算机类博士多少年,弗吉尼亚大学博士几年?
- pc端js获取当前经纬度_js获取用户当前地理位置(省、市、经纬度)
- Windows——如何关闭笔记本自带键盘