因为你没有使用一些设计模式来优化你的代码,所以很多朋友只能自己重写代码。这次我们就通过请假条来聊一聊设计模式——“责任模式”。1、什么是责任模式?比如我们要请假,一般都是写个请假条提交给系统!,找相应的主管批准。处理请假的过程一个接一个,就像一个链条,所有处理请假的人形成了一个责任链。责任模型:责任模型的精妙之处在于,它解耦了请求者和接收者,即分层处理!请求者不知道请假请求是谁处理的,也不需要知道具体的业务逻辑和处理请假请求的链条有多少人,直接提交即可。这样,系统的灵活性和扩展性就很好。不信我们来看实战案例。2、实际案例老板让程序员小李设计一个请假系统。他应该如何设计呢?小李想了想,就用了上面的责任模型。话不多说,他先画了一张UML图来设计业务逻辑关系。1).设计一个请假人,我们把请假人抽象成一个对象,里面的属性必须有名字,请多少天,请假原因等等。所以我们留下了三个参数(姓名、休息日、原因)在Person界面中。这个类中最关键的函数是setLeader()和request()函数:setLeader的作用是设置leave提交给supervisor,你不用关心supervisor的具体级别。请求的目的是扔掉请假条。至于请假条要审批到哪个级别的supervisor,你不用管,因为handleRequest()函数就是用来处理的。2).设计主管的角色有很多,比如组长、部门经理、部门主管、公司老板、HR、行政总监等,我们把这些人抽象成一个基类,叫做主管类。这个Manager类是基类,主要处理get和setNextHandler。即请假是一个链式的,需要有层层提交的关系。比如组长的nextHandler是部门经理,部门经理的next一级处理是公司老板。3).我们设计的请假系统中有TeamLeader、DeptMaanger、Director等几个具体的角色。每个人都有不同的权利,例如:如果在2天内请假,将由TeamLeader批准。如果请假2-10天,由部门经理提出申请。如果请假是10-22天,研发总监会提出申请。主要是改写了handlerRequest类。(大家注意看Pycharm左边有一个蓝色的小圆圈,说明父类的功能被重写了)DeptMaanger也差不多,主要是和审批天数不一样。HR类主要是处理注册备案:3.测试模型。经过上面类的重设计,我们的模型应该可以跑起来了。我们拿几张请假条来测试一下:>>Leo请假2天,请假原因:参加Google大会,同意Leo,请假。签字人:Eric,(组长)请假申请已审核,情况属实!它已被归档和处理。处理器Tina:行政总监-------------------------------------------------苏珊申请休假10天。离职原因:去欧洲旅游,去日本泡温泉。.签字人:Leo,(研发经理)请假申请已审核,情况属实!它已被归档和处理。处理器Tina:行政总监-------------------------------------------------丽丽申请了22天的请假。请假原因:生病休息。我同意丽丽请假。签字人:老王,(公司老板)请假申请已审核,情况属实!它已被归档和处理。处理器Tina:行政总监
