责任链模式是一种行为型设计模式,它将请求从一个对象传递到另一个对象,直到找到能够处理请求的对象为止。责任链模式可以避免请求发送者与接收者之间的耦合关系,从而使多个对象都有机会处理请求,增加了系统的灵活性和可扩展性。

在责任链模式中,通常会定义一个抽象处理者角色和若干个具体处理者角色。抽象处理者角色定义了一个处理请求的接口,并声明了一个后继处理者的引用。具体处理者角色实现了抽象处理者角色定义的接口,并负责处理请求。如果自己不能处理请求,就将请求传递给后继处理者,直到有一个处理者可以处理该请求为止。

下面是一个简单的责任链模式示例代码:

// 抽象处理者角色
public abstract class Handler {
    protected Handler successor; // 后继处理者

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(int request); // 处理请求的抽象方法
}

// 具体处理者角色A
public class ConcreteHandlerA extends Handler {
    public void handleRequest(int request) {
        if (request < 10) {
            System.out.println("ConcreteHandlerA 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 具体处理者角色B
public class ConcreteHandlerB extends Handler {
    public void handleRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("ConcreteHandlerB 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 具体处理者角色C
public class ConcreteHandlerC extends Handler {
    public void handleRequest(int request) {
        if (request >= 20) {
            System.out.println("ConcreteHandlerC 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Handler handler1 = new ConcreteHandlerA();
        Handler handler2 = new ConcreteHandlerB();
        Handler handler3 = new ConcreteHandlerC();

        handler1.setSuccessor(handler2);
        handler2.setSuccessor(handler3);

        int[] requests = {2, 5, 14, 22, 18};

        for (int request : requests) {
            handler1.handleRequest(request);
        }
    }
}

在上面的代码中,抽象处理者角色定义了一个处理请求的抽象方法,并声明了一个后继处理者的引用。具体处理者角色实现了抽象处理者角色定义的接口,并负责处理请求,如果自己不能处理请求,就将请求传递给后继处理者,直到有一个处理者可以处理该请求为止。客户端代码通过设置处理者之间的关系,并将请求传递给第一个处理者来启动责任链模式的执行

给我写个责任链模式

原文地址: https://www.cveoy.top/t/topic/e9xG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录