seo整站优化什么价格,教育机构线上推广方案,广州 网站定制,建站助手目录 1、使用demo演示责任链模式2、传统方案解决oa系统审批3、传统方案解决oa系统审批存在的问题4、职责链模式基本介绍5、职责链模式原理类图6、职责链模式解决oa系统采购审批7、职责链模式的注意事项和细节8、职责链模式的实际使用场景举例 1、使用demo演示责任链模式
学校o… 目录 1、使用demo演示责任链模式2、传统方案解决oa系统审批3、传统方案解决oa系统审批存在的问题4、职责链模式基本介绍5、职责链模式原理类图6、职责链模式解决oa系统采购审批7、职责链模式的注意事项和细节8、职责链模式的实际使用场景举例 1、使用demo演示责任链模式
学校oa系统的采购审批项目需求是 2、传统方案解决oa系统审批 在一个类中对教学器材的价格进行判断然后根据判断调用不同的审批者进行审批 3、传统方案解决oa系统审批存在的问题
客户端这里会使用分支判断来对不用的采购请求进行处理这样就存在如下问题 如果各个级别的人员审批金额发生变化客户端也需要相应变化客户端必须明确知道有多少个审批级别 采购请求和审批人员之间存在强耦合关系不利于代码的扩展和维护 4、职责链模式基本介绍
职责链模式又称为责任链模式每个接收者都包含对另一个接收者的引用如果一个对象不能处理该请求那么它会把相同的请求传给下一个接收者依次类推 5、职责链模式原理类图 对职责链模式的说明
Handler抽象的处理者定义了一个处理请求的方法并且聚合了自身ConcreteHandlerA|B是具体的处理者处理它自己负责的请求可以访问它的后继者如果可以处理当前请求则处理否则将该请求交给下个后继者去处理从而形成一个职责链 6、职责链模式解决oa系统采购审批
1类图分析 2代码实现
// 购买请求
public class PurchaseRequest {//private int type;private float price;private int id;public PurchaseRequest(int type, float price, int id) {this.type type;this.price price;this.id id;}public int getType() {return type;}public float getPrice() {return price;}public int getId() {return id;}
}// 审批者抽象类
public abstract class Approver {Approver approver; // 下一个处理者String name;public Approver(String name) {this.name name;}// 设置下一个处理者public void setApprover(Approver approver) {this.approver approver;}// 处理 审批请求的方法得到一个请求public abstract void processRequest(PurchaseRequest purchaseRequest);
}/*** 部门主任*/
public class DepartmentApprover extends Approver {public DepartmentApprover(String name) {super(name);}Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() 5000) {System.out.println(请求编号 id purchaseRequest.getId() 被 this.name 处理);} else {// 如果不能处理则让下一个处理者进行处理approver.processRequest(purchaseRequest);}}
}/*** 系主任*/
public class CollegeApprover extends Approver {public CollegeApprover(String name) {super(name);}Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() 5000 purchaseRequest.getPrice() 10000) {System.out.println(请求编号 id purchaseRequest.getId() 被 this.name 处理);} else {// 如果不能处理则让下一个处理者进行处理approver.processRequest(purchaseRequest);}}
}/*** 副校长*/
public class ViceSchoolMasterApprover extends Approver {public ViceSchoolMasterApprover(String name) {super(name);}Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() 10000 purchaseRequest.getPrice() 30000) {System.out.println(请求编号 id purchaseRequest.getId() 被 this.name 处理);} else {// 如果不能处理则让下一个处理者进行处理approver.processRequest(purchaseRequest);}}
}
/*** 校长*/
public class SchoolMasterApprover extends Approver {public SchoolMasterApprover(String name) {super(name);}Overridepublic void processRequest(PurchaseRequest purchaseRequest) {if (purchaseRequest.getPrice() 30000) {System.out.println(请求编号 id purchaseRequest.getId() 被 this.name 处理);} else {// 如果不能处理则让下一个处理者进行处理approver.processRequest(purchaseRequest);}}
}public class Client {public static void main(String[] args) {PurchaseRequest purchaseRequest new PurchaseRequest(1, 31000, 1); DepartmentApprover departmentApprover new DepartmentApprover(张主任);CollegeApprover collegeApprover new CollegeApprover(李院长);ViceSchoolMasterApprover viceSchoolMasterApprover new ViceSchoolMasterApprover(王副校);SchoolMasterApprover schoolMasterApprover new SchoolMasterApprover(佟校长);//需要将各个审批级别的下一个设置好 (处理人构成环形: )departmentApprover.setApprover(collegeApprover);collegeApprover.setApprover(viceSchoolMasterApprover);viceSchoolMasterApprover.setApprover(schoolMasterApprover);schoolMasterApprover.setApprover(departmentApprover);departmentApprover.processRequest(purchaseRequest);}
}7、职责链模式的注意事项和细节
将请求和处理分开实现解耦提高系统的灵活性性能收到影响特别是在链比较长的时候。因此需要控制链中最大节点数量一般通过在Handler中设置一个 最大节点数量在setNext方法中判断是否已经超过阈值超过则不允许建立改节点由于采取了链的方式所以调试逻辑比较复杂
8、职责链模式的实际使用场景举例