Java设计模式大题练习7

     当同学们请假的时候,如果请假1-3天只需向辅导员递交请假条,由辅导员批准即可;当请假超过3天,不到1周的话,由辅导员将请假条呈送给二级学院主管学生工作的副书记,由副书记批准;当请假超过一周时,由副书记将请假条呈送给学校学生处处长批准。请根据题意,选择合适的设计模式进行设计 (可以先讲述设计思路,再画出设计类图(也可不画设计类图直接给出源代码)),综合评分。

正确答案:

分析可知,对于请假,不同级别的老师有不同的审批权限,学生处长的权限大于二级学院主管学生工作的副书记,副书记的权限大于辅导员。学生将请假条呈送给具有最低权限的老师,接到请假条的老师如果具有审批权限就直接审批,否则就将请假条递交给具有更高一级权限的老师处理(如果当前接到请教条的老师已经是最高一级权限的老师而且没有审批权限的话,那么就无法再递交给具有更高一级权限的老师,只能是审批不通过了),显然,辅导员,副书记,学生处长构成了一个审批链条,可以采用责任链模式(加上模板方法模式更好)来处理该问题。

可以将请假条作为一个请求类,其中包含请假天数,请假时间,请假事由,请假人等属性;抽象处理者类应该包含一个指向下一个处理者的引用,一个获取处理者最大批假天数的抽象方法和一个抽象回应请假请求的方法,还包含一个具体处理请假请求的方法,在该方法中是判断请假条中的请假天数是否小于等于处理者的最大批假天数,如果是就直接审批,如果不是的话如果该处理者还存在下一个处理者就将请求移交给下一个处理者,如果已经不存在下一个处理者的话那么就审批不能通过。辅导员、副书记和学生处长是三个不同的具体处理者类,都继承自抽象处理者类,在三个不同的处理者类分别设置不同的最大批假天数,具体实现抽象处理者类中的获取最大批假天数方法和回应请假请求的方法。在场景类中分别创建辅导员、副书记、学生处长对象,并且将辅导员对象的下一个处理者设置为副书记对象,将副书记对象的下一个处理者设置为学生处长对象。然后创建请假请求对象并交给辅导员对象的具体处理请假请求的方法就可以了。

其中,handler类是抽象处理者类,辅导员、副书记、学生处长是三个具体的处理者类,继承自handler类。handleRequest方法就是具体处理请假请求的方法,nexthandler是指向下一个处理者的引用。getHandlerMaxDay是获得处理者的最大批假天数方法,responseRequest是回应请假请求方法,这两个方法在handler类中是抽象方法,留待具体的处理者类来实现(这里如果强调handleRequest方法是模板方法,responseRequest方法和getHandlerMaxDay方法是抽象方法则结合了模板方法模式)。Request是请求类(请假条),包含请假天数requestDay,请假人name,请假原因reason,请假日期requestDate等属性,Client类是场景类,在该类的main方法中创建具体的处理者对象,设置责任链(即分别设置处理者对象的下一个处理对象),创建请求并将请求交给责任链中的第一个处理对象来处理。也可以只有一个handler类,然后将最大批假天数,职务这些作为handler类的属性,辅导员、副书记、学生处长是三个不同的handler对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值