也叫职责链模式
定义:为了避免请求发送者和多个请求处理者之间的耦合,于是将所有请求的处理者通过前一对象记住其后一对象的引用。当有请求来时,可将请求沿着链传递,直到有处理者处理它为止。
优点:
结构:
示例场景:班级里面发试卷,老师只把试卷传给第一个同学,第一个学生看看是不是自己的,不是自己的就往后传,直到拿到自己的试卷。
示例代码:
public abstract class StudentHandler {
private StudentHandler next;
public StudentHandler getNext() {
return next;
}
public void setNext(StudentHandler next) {
this.next = next;
}
public abstract void handleRequest(String request);
}
public class ZhangsanHandler extends StudentHandler {
@Override
public void handleRequest(String request) {
if(request.equals("张三")){
System.out.println("张三拿到试卷了");
}else {
this.getNext().handleRequest(request);
}
}
}
public class LisiHandler extends StudentHandler {
@Override
public void handleRequest(String request) {
if(request.equals("李四")){
System.out.println("李四拿到试卷了");
}else {
this.getNext().handleRequest(request);
}
}
}
public class WangwuHandler extends StudentHandler {
@Override
public void handleRequest(String request) {
if(request.equals("王五")){
System.out.println("王五拿到试卷了");
}else {
this.getNext().handleRequest(request);
}
}
}
测试代码:
public class ParteenDemo {
public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
StudentHandler zhangsan=new ZhangsanHandler();
StudentHandler lisi=new LisiHandler();
StudentHandler wangwu=new WangwuHandler();
zhangsan.setNext(lisi);
lisi.setNext(wangwu);
zhangsan.handleRequest("王五");
zhangsan.handleRequest("李四");
}
}
原文:https://www.cnblogs.com/javammc/p/14951951.html