无废话设计模式(20)行为型模式--职责链模式
0-前言
职责链模式定义:
使多个对象都有机会处理请求,从而避免请求的发送者喝接受者之间的耦合关系。
将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止。
1-实现
1-1、简单UML图
1-2、代码实现
//1、处理请求的抽象父类 abstract class Handler { //A、设置下一处理节点 protected Handler NestHandler; public void setNestHandler(Handler nestHandler) { NestHandler = nestHandler; } //B、处理方法 public abstract void HandlerRequest(int count); } //1-1、具体的请求处理者A class HandlerHR extends Handler { //B、处理方法 @Override public void HandlerRequest(int count) { if (count<5) //能处理,直接处理 { System.out.println("才招几个人,HR经理直接就能决定--------------"); } else //不能处理,交给下一个节点处理 { if (NestHandler !=null) { System.out.println("招聘人数超过5个,HR经理无权定夺,交给下一节点处理:--------------------"); NestHandler.HandlerRequest(count); } } } } //1-1、具体的请求处理者A class HandlerBoss extends Handler { //B、处理方法 @Override public void HandlerRequest(int count) { if (count>5) //能处理 { System.out.println("招超过5个人,老板我来拍板"); } else //还不能处理,继续交给链的下一个节点处理.... { } } }
客户端
Handler hr = new HandlerHR(); Handler boss = new HandlerBoss(); hr.setNestHandler(boss); hr.HandlerRequest(4); hr.HandlerRequest(6);
运行结果
2、应用场景简单总结
1、当有多个对象可以处理同一个请求,而具体哪个对象来处理这个请求在运行时刻需要自动判定时;
2、当需要在不明确接受者的情况下向多个对象中某一个提交请求时;
3、当处理一个请求的对象集合应该动态地被确定时