赞
踩
为请求创建一个对象链,每个对象依次检查此请求,并对其进行处理,或者将其传递给链中的下一个对象;
链中的每一个对象都需要扮演一个处理器,并且有一个后继对象,如果他可以处理请求,就进行处理,如果不能,就将请求转发给后继者
考虑一个简单的审批流程,包括经理、部门主管和CEO三个级别的审批。在这个场景中,责任链模式可以很好地应用。
// 抽象处理者 abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handleRequest(String request); } // 具体处理者1 class Manager extends Handler { @Override public void handleRequest(String request) { if (request.equals("manager")) { System.out.println("Manager approved the request."); } else { System.out.println("Manager cannot handle the request."); if (successor != null) { successor.handleRequest(request); } } } } // 具体处理者2 class DepartmentHead extends Handler { @Override public void handleRequest(String request) { if (request.equals("department_head")) { System.out.println("Department Head approved the request."); } else { System.out.println("Department Head cannot handle the request."); if (successor != null) { successor.handleRequest(request); } } } } // 具体处理者3 class CEO extends Handler { @Override public void handleRequest(String request) { if (request.equals("CEO")) { System.out.println("CEO approved the request."); } else { System.out.println("CEO cannot handle the request."); if (successor != null) { successor.handleRequest(request); } } } } // 客户端 public class Main { public static void main(String[] args) { // 创建具体处理者对象 Handler manager = new Manager(); Handler departmentHead = new DepartmentHead(); Handler ceo = new CEO(); // 设置责任链 manager.setSuccessor(departmentHead); departmentHead.setSuccessor(ceo); // 发送请求 manager.handleRequest("department_head"); manager.handleRequest("manager"); manager.handleRequest("CEO"); manager.handleRequest("other"); } }
在这个示例中,**Handler**
是抽象处理者,包含了一个指向下一个处理者的引用。 **Manager**
、
DepartmentHead和
CEO是具体的处理者,它们实现了
handleRequest`方法来处理请求。在客户端代码中,首先创建具体处理者对象,然后设置责任链,并发送请求。
责任链模式在许多知名的框架和库中都有应用。以下是一些采用责任链模式的知名框架和库的例子:
这些是一些采用责任链模式的知名框架和库的例子,它们充分利用了责任链模式的灵活性和可扩展性,使得代码更加模块化和易于维护。
责任链模式和链表之间有一些相似之处,主要体现在它们的结构特点和数据流动方式上。具体来说,它们的关联在于:
虽然责任链模式和链表在结构上有相似之处,并且都涉及到数据的顺序流动,但它们的目的和应用场景不同。责任链模式用于实现请求的传递和处理,而链表用于组织和存储数据。因此,虽然有关联,但它们在概念上和实际应用中的作用是不同的。
在面试中,关于责任链模式的问题可能涉及其原理、优缺点、应用场景以及实际应用等方面。以下是一些可能的问题以及相应的答案:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。