背景
OA采购审批系统,有以下需求:
如果金额小于等于5000,由教导主任审批
如果金额小于等于10000,由系主任审批
如果金额小于等于30000,由副校长审批
如果金额大于30000,由校长审批
传统思路:
用一个类,通过if else判断,传入金额数,返回审批人。
问题:
利用到if else 进行判断,如果审批人和金额发生变化需要进行大幅度更改。
必须了解所有审批情况。
请求与审批人之间是强耦合关系。
基本介绍
是一个行为模式,为请求创建一个接收者对象的链。
每个处理者都包含另一个权限高一级处理者的引用
将请求交给权限最低的处理者,判断自己是否能处理,如果不能处理,则交给下一级处理者,以此类推,如果最高级处理者也无法处理,则驳回请求。
三个角色
①Handler:一个处理者抽象类,声明了处理方式和下一级处理者的引用
②ConcreteHandler:具体处理者,继承自Handler抽象类。
③Request:请求类,将会被传入处理者类中
具体实现
创建Approver类,代表处理者,声明下一级处理者和一个处理方法。
创建具体处理者:教导主任、系主任、副校长、校长,继承自Approver类,
教导主任的下一级Approver是系主任,系主任是副校长,以此类推,校长没有下一级Approver
具体处理者在实现处理方法时,先判断金额是否是自己可以处理的,能处理的就直接处理,如果不能处理则调用下一级Approver的处理方法。
创建PurchaseRequest类,代表请求。
在客户端调用时,创建一个PurchaseRequest,把这个请求传入教导主任的处理方法中,并调用这个处理方法,则可以自动处理。