知识回顾:
之前我们讲过的设计模式在这里呦:
【面试最常见的设计模式之单例模式】
【面试最常见的设计模式之工厂模式】
【Java中23种面试常考的设计模式之备忘录模式(Memento)—行为型模式】
【Java中23种面试常考的设计模式之观察者模式(Observer)—行为型模式】
【Java中23种面试常考的设计模式之模板模式(Template)—行为型模式】
【Java中23种面试常考的设计模式之状态模式(State)—行为型模式】
【Java中23种面试常考的设计模式之策略模式(Strategy)—行为型模式】
【Java中23种面试常考的设计模式之迭代器模式(Iterator)—行为型模式】
【Java中23种面试常考的设计模式之访问者模式(Visitor)—行为型模式】
【Java中23种面试常考的设计模式之中介者模式(Mediator)—行为型模式】
【Java中23种面试常考的设计模式之解释器模式(Interpreter)—行为型模式】
【Java中23种面试常考的设计模式之命令模式(Command)—行为型模式】
接下来我们要进行学习的是:【Java中23种面试常考的设计模式之责任链模式(Chain of Responsibility)—行为型模式】。
Handler:处理请求的规则
ConcreteHandler: 处理请求的实现类
Client–Main:客户端测试类

• 如果请假天数小于5天,班主任审批
• 如果请假天数大于等于5天,小于15天,学办负责人审批
• 如果大于等于15天,小于30天,学院书记审批
• 如果大于等于30天,提示拒绝
class Request {
private String username;
private int leaveDays;
private String reason;
public Request(String username, int leaveDays, String reason) {
super();
this.username = username;
this.leaveDays = leaveDays;
this.reason = reason;
}
public String getEmpName() {
return username;
}
public void setEmpName(String empName) {
this.username = empName;
}
public int getLeaveDays() {
return leaveDays;
}
public void setLeaveDays(int leaveDays) {
this.leaveDays = leaveDays;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
}
package com.responsibility;
public abstract class LeaderHandler {
protected String name;
protected LeaderHandler nextLeader;
public LeaderHandler(String name) {
super();
this.name = name;
}
public void setNextLeader(LeaderHandler nextLeader) {
this.nextLeader = nextLeader;
}
public abstract void handleRequest(Request request);
}
package com.responsibility;
public class ConcreteHeadTeacherHandler extends LeaderHandler {
public ConcreteHeadTeacherHandler(String name) {
super(name);
}
@Override
public void handleRequest(Request request) {
if(request.getLeaveDays()<5){
System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
System.out.println("班主任:"+this.name+",审批通过!");
}else{
if(this.nextLeader!=null){
System.out.println("班主任:无法审核,请找相关负责人。。。。");
this.nextLeader.handleRequest(request);
}
}
}
}
package com.responsibility;
public class ConcreteDirectorHandler extends LeaderHandler {
public ConcreteDirectorHandler(String name) {
super(name);
}
@Override
public void handleRequest(Request request) {
if(request.getLeaveDays()<15){
System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
System.out.println("学办负责人:"+this.name+",审批通过!");
}else{
if(this.nextLeader!=null){
System.out.println("学办负责人:无法审核,请找相关负责人。。。。");
this.nextLeader.handleRequest(request);
}
}
}
}
package com.responsibility;
public class ConcreteClerkHandler extends LeaderHandler {
public ConcreteClerkHandler(String name) {
super(name);
}
@Override
public void handleRequest(Request request) {
if(request.getLeaveDays()<30){
System.out.println("员工:"+request.getEmpName()+"请假,天数:"+request.getLeaveDays()+",理由:"+request.getReason());
System.out.println("学院书记:"+this.name+",审批通过!");
}else{
if(this.nextLeader!=null){
System.out.println("请假时间太长啦,不可以哟。。。");
}
}
}
}
package com.responsibility;
public class Main {
public static void main(String[] args) {
LeaderHandler a = new ConcreteHeadTeacherHandler("班主任:小红");
LeaderHandler b = new ConcreteDirectorHandler("学办负责人:小绿");
LeaderHandler b2 = new ConcreteClerkHandler("学院书记:小紫");
a.setNextLeader(b);
b.setNextLeader(b2);
Request request = new Request("小明", 15, "请假回家!");
a.handleRequest(request);
}
运行结果展示:

好了,到这里【Java中23种面试常考的设计模式之责任链模式(Chain of Responsibility)—行为型模式】就结束了,23种设计模式持续更新汇总中。