Advertisement

2024年最新三国演义:责任链模式(3),2024年最新最新精心整理C C++面试题

阅读量:
img
img

网上充斥着大量学习资源。然而,在这些知识中若无法形成系统的理解和掌握,则在遇到技术难题时往往停留在表面了解和初步接触,并未进行深入探究和持续学习的习惯,则难以实现真正的技术突破。

期待系统化学习资源的朋友,请您点击这里获取

一个人行动速度快于单独行动时的表现仅限于个人能力的最大化发挥。然而一个团队若要取得更大的成功则需要协调与合作的力量共同推动目标实现!无论你是IT领域的资深从业者或是一直对这一领域充满热情的新手我们始终欢迎你的加入!让我们一起在技术交流中分享经验在学习资源中提升自我在职场吐槽中增进友谊在各大名企内推中开拓视野以及在面试辅导中积累实战经验共同成长进步!

if ((nextHandler == null)) {
// 打印消息
System.out.println("Request handled by HandlerA");
} else {
// 调用处理逻辑
nextHandler.handle();
}

public class HandlerB extends Handler{
@Override
public void handle() {
if(nextHandler == null){
System.out.println(“HandlerB handle …”);
}else{
nextHandler.handle();
}
}
}

【 extends Handler 的 HandlerC 类

实现了

如果

执行

否则

结束 if

结束

测试

结束

复制代码
    运行结果:
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

HandlerC handle …

复制代码
    从上面代码,我们可以画出UML图:
![]()
    
    
    
    
    从UML图中,我们又可以看出,责任链模式中有两个非常重要的角色:
    
    
    (1)、抽象处理者角色(Handler)
    
    
    
    > 
    > 定义处理请求的接口。接口可以也可以给出一个方法以设定和返回对下个对象引用。这个角色通常由一个Java抽象类或者Java接口实现。
    > 
    > 
    > 
    
    
    (2)、具体处理者角色(HandlerA、HandlerB、HandlerC)
    
    
    
    > 
    > 具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下个对象。由于具体处理者持有对下家的引用。
    > 
    > 
    > 
    
    
    #### 责任链模式的优缺点
    
    
    * 优点:请求和处理分开,两者解耦,提供系统的灵活性。
    * 缺点:性能能问,一个链非常长的时候,非常耗时。因为我们避免建立很长的链。
    
    
    ### 生活中的案例
    
    
    在日常生活中,责任链模式是比较常见的。我们平时处理工作中的一些事务,往往是各部门协同合作来完成某一个任务的。而每个部门都有各自的职责,因此,很多时候事情完成一半,便会转交到下一个部门,直到所有部门都审批通过,事情才能完成。
    
    
    责任链模式主要解耦了请求与处理,客户只需将请求发送到链上即可,不需要关心请求的具体内容和处理细节,请求会自动进行传递,直至有节点对象进行处理。
    
    
    责任链模式主要适用于以下应用场景:
    
    
    * 多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定。
    * 在不明确指定接收者的情况下,向多个对象中的一个提交请求。
    * 可动态指定一组对象处理请求。
    
    
    ### 请假流程的代码实现
    
    
    下面我们来对,前面的案例:OA上请假流程做一个Java代码的实现。
    
    
    抽象处理者:领导类
    
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

复制代码
    项目负责人
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

public class ProjectLeader extends Leader {
@Override
public void handleRequest(double LeaveDays) {
if (LeaveDays <= 0.5) {
System.out.println(“项目负责人批准您请假” + LeaveDays + “天。”);
} else {
if (getNext() != null) {
getNext().handleRequest(LeaveDays);
} else {
System.out.println(“请假天数太多,没有人批准该假条!”);
}
}
}
}

复制代码
    技术总监
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

public class TechnicalDirectorLeader extends Leader {

@Override
public void handleRequest(double LeaveDays) {
if (LeaveDays ≤ 1) {
System.out.println("技术主管同意您的请休假" + LeaveDays + "天。");
} else {
if (getNext()不为空) {
调用getNext().handleRequest(LeaveDays);
} else {
System.out.println("请休假天数过多, 无人审批该假条申请!");
}
}
}

复制代码
    Boss
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

public class BossLeader extends Leader {
@Override
public void handleRequest(double LeaveDays) {
if (LeaveDays >= 2 && LeaveDays <= 30) {
System.out.println(“Boss批准您请假” + LeaveDays + “天。”);
} else {
if (getNext() != null) {
getNext().handleRequest(LeaveDays);
} else {
System.out.println(“请假天数太多,没有人批准该假条!”);
}
}
}
}

复制代码
    发起审批
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

公司类系统 named "职责审批系统" {
static public main(String[] args) {
//搭建责任承接架构
ProjectManager projectManager = new ProjectManager();
Technical Director Leader technicalDirector = new TechnicalDirector();
Chief Executive Officer ceo = new CEO();
}
}

项目负责人将技术部门负责人的职位设置为 boss 职位。
技术部门负责人将下一个职位设置为 boss 职位。

//请假两天,提交请假流程,开启审批环节,
projectLeader.handleRequest(2);
}
}

复制代码
    审批结果
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

Boss批准您请假2.0天。

复制代码
    如果请假天数是31天,审批结果
    
    
    
    
    
      
      
      
      
      
    
    AI写代码

请假天数太多,没有人批准该假条!

复制代码
    整个请假流程为:
![]()
    
    
    
    把这张流程图改成纵向:
![]()
    
    
    
    就这么一环套一环的,使用上面两个例子和两张图来理解责任链模式是不是就更轻松了?
    
    
    自己吹牛逼,没什么用,下面来看看大神们是怎么使用责任链模式的。
    
    
    ### 大佬们是如何使用的
    
    
    在Spring、Mybatis等框架中,都用使用到责任链模式,下面先来看在Spring中是如何使用的。
    
    
    在Spring MVC中的`org.springframework.web.servlet.DispatcherServlet`类中:
![]()
    
    
    
    `getHandler` 方法的处理使用到了责任链模式,`handlerMappings`是之前 Spring 容器初始化好的,通过遍历 `handlerMappings`查找与`request`匹配的 `Handler`, 这里返回 `HandlerExecutionChain` 对象。这个 `HandlerExecutionChain`对象到后面执行的时候再分析为什么返回的是这样一个对象。
    
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI写代码

@Nullable
protected HandlerExecutionChain getHandler(Request request) throws Exception {
if (this.handlerMappings == null) {
// Loop through each registered handler mapping in this list.
for (final HandlerMapping mapping : this.handlerMappings) {
// Execute the handler for the provided request object.
final HandlerExecutionChain handler = mapping.getHandler(request);
if (handler != null) {
// Return the first valid handler found.
return handler;
}
}
}
}

img
img

丰富的网上的学习资源存在;若所学知识缺乏系统性,则在遇到问题时往往停留在表面理解,并不进行深入的研究;难以实现技术能力的真正提升。

想要一套系统化资料的用户,请点击这里下载

一个人可能离最佳状态还有一段距离,但如果组成一个团队,则会迸发出惊人的创造力和战斗力!无论你是IT行业的资深从业者还是新兴领域的探索者,我们都热忱欢迎你的加入!在这里你可以享受到丰富的技术交流机会、优质的学习资源以及轻松愉快的工作氛围,并有机会参与顶尖企业的内推活动和高薪岗位推荐服务以及专业的面试辅导支持。让我们共同在这里学习成长吧!

HYZ1j-1715667987377)]
[外链图片转存中…(img-FOyThkF0-1715667987378)]

丰富的网上学习资源存在多样性与数量感召力并存的状态,在这种情况下若所学知识缺乏系统性若在遇到问题时往往停留在表面理解若不进行深入探究就难以实现真正技术能力的提升

想要获取系统化学习资料的朋友,请点击这里查看所需内容

单兵作战效率高,但集体协作才能取得更大的成就!无论你是IT行业的资深从业者还是充满热情的新手小白,都欢迎加入我们的技术交流圈子(技术交流群、学习资源库、职场吐槽区、大厂内推渠道以及面试辅导班),共同进步,携手成长!

全部评论 (0)

还没有任何评论哟~