职责链模式
学校OA系统的采购审批项目
采购员采购教学器材
1)如果金额小于等于5000,由教学主任审批(0<=x<=5000)
2)如果金额小于等于10000,由院长审批(5000<x<=10000)
3)如果金额小于等于30000,由副校长审批(10000<x<=30000)
4)如果金额超过30000,由校长审批(30000<x)
传统方案解决OA系统审批,传统的设计方案(类图)
传统方案解决OA系统审批问题分析
1)传统方式是:接收一个采购请求后,根据采购金额来调用对应Approver(审批人)完成审批
2)传统方式的问题分析:客户端这里会使用到分支判断(比如switch)来对不同的采购请求处理,这样就存在如下问题(1)如果各个级别的人员审批金额发生变化,在客户端的也需要变化(2)客户端必须明确的知道有多少审批级别和访问
3)这样对一个采购请求进行处理和Approver(审批人)就存在强耦合关系,不利于代码的扩展和维护
4)职责链模式
1、职责链模式
基本介绍
1)职责链模式(ChainOfResponsibilityPattern),又叫责任链模式,为请求创建了一个接收者对象的链。这种模式对请求的发送和接收者进行解耦
2)职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么他会把相同的请求传给下一个接收者,依次类推
3)这种类型的设计模式属于行为型模式
对原理类图的说明
1)Handler:抽象的处理者,定义了一个处理请求的接口,同时含有另外Handler
2)ConcreteHandlerA,B是具体的处理者,处理它自己负责的请求,可以访问它的后继者,如果可以处理当前请求,则处理,否者就将请求交给后继者处理,从而形成一个职责链
3)Request,含义很多属性,表示一个请求
职责链模式解决OA系统采购审批
package designPatterns.chainofresponsibility;
//采购请求
public class PurchaseRequest {
private int id;
private float price;
private int type = 0;
public PurchaseRequest(int id, float price, int type) {
this.id = id;
this.price = price;
this.type = type;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public int getType()