设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
2023-12-22 22:58:58
一、快速理解责任链模式
责任链模式是一种行为型设计模式,它将请求的发送者和接收者解耦,使多个对象都有机会处理请求。每个接收者都包含对下一个接收者的引用,形成一个链条,当请求从链条的头部开始传递时,每个接收者都有机会处理请求,直到有一个接收者能够处理为止。
在现实生活中,责任链模式的例子可以是请假审批流程。假设有多个层级的审批人员,每个人都有不同的审批权限。当员工提交请假申请时,请求会从最高层级的审批人员开始传递,如果一个审批人员无法处理请求,则将请求传递给下一个审批人员,直到有人能够处理为止。
二、责任链模式使用场景
- 当有多个对象可以处理同一个请求时,可以使用责任链模式。每个对象都有机会处理请求,但处理者不需要知道请求的发送者和后续处理者。
- 当需要动态指定处理请求的对象时,可以使用责任链模式。可以根据特定条件来决定请求的传递顺序或跳过某些处理者。
代码示例
下面是一个通俗易懂的责任链模式示例代码,以请假审批为场景:
// 抽象处理者:审批人
abstract class Approver {
protected Approver nextApprover;
public void setNextApprover(Approver nextApprover) {
this.nextApprover = nextApprover;
}
public abstract void approveLeave(int days);
}
// 具体处理者:主管
class Supervisor extends Approver {
@Override
public void approveLeave(int days) {
if (days <= 2) {
System.out.println("主管批准了请假申请");
} else {
if (nextApprover != null) {
nextApprover.approveLeave(days);
} else {
System.out.println("没有人能够处理该请假申请");
}
}
}
}
// 具体处理者:经理
class Manager extends Approver {
@Override
public void approveLeave(int days) {
if (days <= 5) {
System.out.println("经理批准了请假申请");
} else {
if (nextApprover != null) {
nextApprover.approveLeave(days);
} else {
System.out.println("没有人能够处理该请假申请");
}
}
}
}
// 具体处理者:CEO
class CEO extends Approver {
@Override
public void approveLeave(int days) {
if (days <= 7) {
System.out.println("CEO批准了请假申请");
} else {
System.out.println("没有人能够处理该请假申请");
}
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Approver supervisor = new Supervisor();
Approver manager = new Manager();
Approver ceo = new CEO();
supervisor.setNextApprover(manager);
manager.setNextApprover(ceo);
supervisor.approveLeave(3); // 主管批准了请假申请
supervisor.approveLeave(6); // CEO批准了请假申请
supervisor.approveLeave(9); // 没有人能够处理该请假申请
}
}
在上面的示例中,Approver是抽象处理者,定义了处理请假申请的方法和下一个处理者的引用。Supervisor、Manager和CEO是具体处理者,分别实现了抽象处理者的处理请假申请方法,并在其中判断是否能够处理请求,如果不能处理则将请求传递给下一个处理者。
在客户端代码中,首先创建了主管、经理和CEO对象,并设置它们的下一个处理者。然后调用主管的approveLeave方法来发起请假申请,该方法会根据请假天数判断是否能够处理请求,如果不能处理则会将请求传递给下一个处理者。最后,根据不同的请假天数,输出不同的处理结果。
通过使用责任链模式,可以灵活地指定处理请求的对象,并且可以动态调整处理者的顺序或跳过某些处理者。责任链模式还可以将请求的发送者和接收者解耦,使得它们之间的依赖关系更加松散。
文章来源:https://blog.csdn.net/qq_42262444/article/details/135161839
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!