当前位置: 首页 > wzjs >正文

常德网站建设制作外包服务公司排名

常德网站建设制作,外包服务公司排名,头像制作器,贵州政务网站建设规范设计模式——职责链模式 参考尚硅谷宋红康老师的图解设计模式 场景描述 学校采购一批 OA 系统时,需要根据采购金额决定审批人: 例如: 5000 元,主任审批 6000 元,校长审批 8000 元,教育部审批 传统解决方案…

设计模式——职责链模式

参考尚硅谷宋红康老师的图解设计模式

场景描述

学校采购一批 OA 系统时,需要根据采购金额决定审批人:

例如:

  • 5000 元,主任审批

  • 6000 元,校长审批

  • 8000 元,教育部审批

传统解决方案

传统方案中,采购金额与审批人之间存在硬编码关系,通常使用 if-elseswitch 来判断金额,并决定审批人。
这种方式有以下问题:

  • 代码不灵活:如果金额范围改变,客户端需要进行大规模修改。
  • 强耦合:客户端需要了解所有审批级别和金额区间,导致系统的代码维护困难。

职责链模式通过将请求的处理责任沿着一个链条传递来解决上述问题。每个处理者持有对下一个处理者的引用,如果当前处理者无法处理请求,则将请求传递给下一个处理者,直到有处理者能够处理请求。
在这里插入图片描述

职责链模式的组成部分
  1. Handler(处理者):定义一个处理请求的接口,并持有对下一个处理者的引用。
  2. ConcreteHandler(具体处理者):实现了具体的请求处理逻辑,如果该处理者无法处理请求,则将请求传递给下一个处理者。
  3. Request(请求):表示一个具体的请求,通常包含多个属性,如请求的金额、类型等。
示例图

image-20250214195006750

职责链模式

具体实现
Approver(抽象处理者)
package top.miqiu.designPatternDemo.responsibilityChan;import lombok.Data;@Data
public abstract class Approver {Approver approver;  // 下一个处理者String name;public Approver(String name){this.name = name;}// 处理审批请求的抽象方法,具体实现由子类完成public abstract void processRequest(Purchaserequest purchaserequest);
}
Client(客户端)
package top.miqiu.designPatternDemo.responsibilityChan;import top.miqiu.designPatternDemo.responsibilityChan.processerImpl.CollegeAprover;
import top.miqiu.designPatternDemo.responsibilityChan.processerImpl.DepartmentApprover;
import top.miqiu.designPatternDemo.responsibilityChan.processerImpl.SchoolMasterApprover;
import top.miqiu.designPatternDemo.responsibilityChan.processerImpl.ViceSchoolMasterApprover;public class Client {public static void main(String[] args) {// 创建采购请求Purchaserequest purchaserequest = new Purchaserequest(1, 1000, 1);// 创建相关的审批人DepartmentApprover departmentApprover = new DepartmentApprover("张主任");CollegeAprover collegeAprover = new CollegeAprover("李院长");ViceSchoolMasterApprover viceSchoolMasterApprover = new ViceSchoolMasterApprover("王副校长");SchoolMasterApprover schoolMasterApprover = new SchoolMasterApprover("杨校长");// 构建审批链:从部门审批到校长审批departmentApprover.setApprover(collegeAprover);collegeAprover.setApprover(viceSchoolMasterApprover);viceSchoolMasterApprover.setApprover(schoolMasterApprover);// 发起请求并处理schoolMasterApprover.processRequest(purchaserequest);}
}
Purchaserequest(请求类)
package top.miqiu.designPatternDemo.responsibilityChan;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Purchaserequest {private int type = 0;  // 请求类型private float price = 0.0f;  // 请求金额private int id = 0;  // 请求ID
}
SchoolMasterApprover(具体处理者)
package top.miqiu.designPatternDemo.responsibilityChan.processerImpl;import top.miqiu.designPatternDemo.responsibilityChan.Approver;
import top.miqiu.designPatternDemo.responsibilityChan.Purchaserequest;public class SchoolMasterApprover extends Approver {public SchoolMasterApprover(String name) {super(name);}@Overridepublic void processRequest(Purchaserequest purchaserequest) {// 校长审批金额大于 7000 的请求if (purchaserequest.getPrice() > 7000) {System.out.println("请求ID:" + purchaserequest.getId() + " 由 " + this.getName() + " 处理");} else {// 转交给下一个处理者this.getApprover().processRequest(purchaserequest);}}
}

在源码中的运用

在 Spring MVC 中,请求的处理遵循类似的职责链模式。具体而言,HandlerExecutionChain 的职责是将请求分配给链路上的处理器。Spring MVC 中有一个拦截器链,负责请求的预处理和后处理。

HandlerExecutionChain 内部维护了一个 HandlerExecutionInterceptor 的集合,拦截器会在请求处理前后分别执行 preHandlepostHandle 方法,从而形成职责链的模式。每个拦截器执行时,都可以判断是否继续处理请求,或者终止链的执行。

注意事项与细节

好处:
  • 解耦请求和处理逻辑:请求和处理过程解耦,使得对象不需要知道链的结构,便于扩展和维护。
  • 灵活性:可以通过动态添加处理者来灵活调整审批流程。
缺点:
  • 性能开销:如果链条过长,可能会对性能产生一定影响,需要考虑最大节点数的控制。
  • 调试困难:链式结构的调试较为复杂,可能需要追踪多个处理者的执行流程。

总结

职责链模式非常适合用于多个对象可以处理同一请求的场景。它使得系统可以灵活地调整请求的处理顺序和流程,而不需要修改客户端代码,从而降低了系统的耦合度和维护成本。


文章转载自:

http://BJLjYp4C.mkpkz.cn
http://Cado6hTt.mkpkz.cn
http://C7Yg7mCO.mkpkz.cn
http://vKsCZY0e.mkpkz.cn
http://IB4zzja1.mkpkz.cn
http://PsZWUnbc.mkpkz.cn
http://4ErfwgWC.mkpkz.cn
http://v0Fn98V9.mkpkz.cn
http://XefyvVGt.mkpkz.cn
http://DfHDn6Nc.mkpkz.cn
http://sF81Sp4F.mkpkz.cn
http://eEwgrSzA.mkpkz.cn
http://WDM9pkdI.mkpkz.cn
http://9JS6rD4B.mkpkz.cn
http://IsPFf0TO.mkpkz.cn
http://gDY9Zchp.mkpkz.cn
http://Qx8T1Ulb.mkpkz.cn
http://AUeM4luC.mkpkz.cn
http://10xMPPz7.mkpkz.cn
http://8Mb4W48P.mkpkz.cn
http://Ioj3FUiv.mkpkz.cn
http://siLa4GX7.mkpkz.cn
http://wNjRkyoo.mkpkz.cn
http://mr0dl16C.mkpkz.cn
http://lUDTcyM4.mkpkz.cn
http://zz3CacZ4.mkpkz.cn
http://oKNMFYsy.mkpkz.cn
http://NSreI8yJ.mkpkz.cn
http://OMjgVMna.mkpkz.cn
http://MTudaybq.mkpkz.cn
http://www.dtcms.com/wzjs/746100.html

相关文章:

  • 婚纱网站建设步骤和方法app定制的价格开发
  • 张槎网站建设godaddy中文网站开发
  • 怎么自己做网站挣钱网站制作公司的网站
  • 兰州网站制作怎么样h5案例网站
  • 站长工具seo综合厦门住建局
  • 普通网站要什么费用保定满城网站建设
  • 保护膜 东莞网站建设网站群系统建设
  • 能自己做网站接业务吗衡阳网站建设价格
  • 佛山哪有网站建设公司成都网站推广招聘
  • 苏州网站制作哪家好企业展厅公司
  • wordpress网站恢复网站推广的策略方法
  • WordPress如何建立手机网站今天刚刚长沙
  • 网站开发交什么税wordpress 搬家
  • 南昌做网站seo留言小程序模板
  • 网站做优化按点击收费深圳航空公司官网
  • tp3企业网站开发百度云网站开发是什么意思
  • cms开源网站管理系统wordpress评论特效
  • 新建网站3d建模一般学多久
  • 网站建设构建方案为什么要建设种苗供求网站
  • 老年夫妻做爰视频网站网站设计规划报告
  • 网站开发评估与调整求职网站网页模板
  • 手机网站生成app软件中国建设网官方
  • 网站建设服务的具体条件网站开发项目企划书
  • 网站开发专员绩效考核网站渗透
  • 营销型网站的类型有哪些wordpress 大型站
  • 秦皇岛北京网站建设搜索网站的软件有哪些
  • 电子商务网站建设和管理的意义页面紧急情况访问升级跳拿笔记
  • 网站建设模块是什么怎么样推销自己网站
  • 一个网站做多访问量网站做很多关键词
  • 湖南张家界建设厅网站网站备案密码收不到