行为型设计模式之Chain of Responsibility(责任链)
行为型设计模式之Chain of Responsibility(责任链)
摘要:
责任链模式是一种行为型设计模式,允许请求沿着处理链传递,直到被某个对象处理。该模式由Handler抽象类定义处理接口,ConcreteHandler具体实现处理逻辑,每个处理者决定处理请求或传递给下个处理者。适用于多个对象可处理请求、请求接收者不明确或需动态指定处理集合的场景。示例代码展示了请假审批链,从小组长到部门经理逐级审批,体现了责任链的动态处理机制。
1)意图
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
2)结构
其中;
- Handle 定义一个处理请求的接口;(可选)实现后继链。
- ConcreHandler 处理它所负责的请求;可访问它的后继者;如果可处理该请求,就处理它,否则将该请求转发给后继者。
- Client 向链上具体处理着 (ConcreHandler)对象提交请求。
3)适用性
Chain of Responsibility 模式适用于以下条件:
- 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
- 想在 不明确指定接收者的情况下向多个对象中的一个提交一个请求。
- 可处理一个请求的对象集合应被动态的指定。
代码:
/*** @author psd 行为型设计模式之责任链模式*/
public class ChainOfResponsibilityPatternDemo {public static void main(String[] args) {Handler groupLeader = new GroupLeader();Handler projectManager = new ProjectManager();Handler departmentManager = new DepartmentManager();groupLeader.setNext(projectManager);projectManager.setNext(departmentManager);groupLeader.handleRequest(41);}
}abstract class Handler {/*** 下一个处理者*/protected Handler nextHandler;public void setNext(Handler nextHandler) {this.nextHandler = nextHandler;}/*** 请求的个数* * @param request* 请求处理*/public abstract void handleRequest(int request);
}/*** 小组长*/
class GroupLeader extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 3) {System.out.println("小组长处理了请求" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}/*** 项目经理*/
class ProjectManager extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 5) {System.out.println("项目经理处理了请求:" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}/*** 部门经理*/
class DepartmentManager extends Handler {@Overridepublic void handleRequest(int request) {if (request <= 10) {System.out.println("部门领导处理了请求:" + request);} else {if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("无法审批...");}}}
}
喜欢我的文章记得点个在看,或者点赞,持续更新中ing…