设计模式-责任链模式

责任链模式

也叫职责链模式

定义:为了避免请求发送者和多个请求处理者之间的耦合,于是将所有请求的处理者通过前一对象记住其后一对象的引用。当有请求来时,可将请求沿着链传递,直到有处理者处理它为止。

优点:

  • 降低了对象之间的耦合度,该模式使得一个对象无须知道到底是哪一个对象处理其请求。
  • 责任链简化了对象之间的连接,每个对象只需要保持一个后继者的引用,不需要保持其他所有的处理者,避免了使用众多的if/else
  • 责任分担,每个类只处理自己该处理的工作,不该处理的传递给下一个对象完成。

结构:

  • Handler :抽象处理者
  • ConcreteHandler : 具体处理者

示例场景:班级里面发试卷,老师只把试卷传给第一个同学,第一个学生看看是不是自己的,不是自己的就往后传,直到拿到自己的试卷。

示例代码:

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("李四");
    }
}

返回目录

posted @ 2021-06-29 20:52  女友在高考  阅读(75)  评论(0编辑  收藏  举报