职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
职责链模式Demo:
/**
* 2018年4月7日下午10:03:29
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestChainOfResponsibility {
/**
* @param args
*/
public static void main(String[] args) {
ChainHandler teacher = new teacherHandler();
ChainHandler director = new directorHandler();
ChainHandler schoolmaster = new schoolmasterHandler();
teacher.setNextHandler(director);
director.setNextHandler(schoolmaster);
teacher.handle(4);
teacher.handle(22);
teacher.handle(55);
teacher.handle(500);
System.out.println("=======================");
//恰好主任不在
teacher.setNextHandler(schoolmaster);//老师直接找校长
teacher.handle(4);
teacher.handle(22);
teacher.handle(55);
teacher.handle(500);
}
}
abstract class ChainHandler{
protected ChainHandler nextHandler;
public void setNextHandler(ChainHandler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handle(int days);
}
class teacherHandler extends ChainHandler{
@Override
public void handle(int days) {
if(days <= 7) {
System.out.println("OK,老师批准假期(天):"+days);
}else {
System.out.println("老师无法批准 "+days+" 天");
nextHandler.handle(days);
}
}
}
class directorHandler extends ChainHandler{
@Override
public void handle(int days) {
if(days <= 30) {
System.out.println("OK,主任批准假期(天):"+days);
}else {
System.out.println("主任无法批准 "+days+" 天");
nextHandler.handle(days);
}
}
}
class schoolmasterHandler extends ChainHandler{
@Override
public void handle(int days) {
if(days >= 360) {
System.out.println("校长认为假期太长,需要先考虑考虑。");
}else {
System.out.println("OK,校长批准假期(天):"+days);
}
}
}
结果: