【行为型模式】Java设计模式之:责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象来处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。在责任链模式中,请求沿着一条链传递,直到有一个对象处理它为止。

在责任链模式中,通常有一个抽象处理者(Handler)类,它定义了一个处理请求的接口,并且包含一个指向下一个处理者的引用。每个具体处理者(ConcreteHandler)类实现了处理请求的方法,并且决定是否将请求传递给下一个处理者。文章源自新逸网络-https://www.xinac.net/9361.html

下面是一个简单的 Java 实现责任链模式的示例:文章源自新逸网络-https://www.xinac.net/9361.html

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

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

    public abstract void handleRequest(int request);
}

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

// 具体处理者B
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
class ConcreteHandlerC extends Handler {
    public void handleRequest(int request) {
        if (request >= 20 && request < 30) {
            System.out.println("ConcreteHandlerC 处理请求 " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();

        handlerA.setSuccessor(handlerB);
        handlerB.setSuccessor(handlerC);

        int[] requests = {5, 15, 25, 35};

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

在上面的示例中,抽象处理者类定义了一个 `setSuccessor()` 方法来设置后继处理者,以及一个抽象的 `handleRequest()` 方法来处理请求。具体处理者类实现了 `handleRequest()` 方法,并且判断当前处理者是否能够处理该请求,如果不能则将请求传递给后继处理者。客户端通过链式设置处理者的后继关系,并且将请求发送给第一个处理者来开始处理请求。文章源自新逸网络-https://www.xinac.net/9361.html

责任链模式的优点是将请求和处理分离,降低了系统的耦合度,同时增加了系统的灵活性和可扩展性。但是需要注意的是,由于每个请求都需要在责任链中传递,因此会有一定的性能损失。文章源自新逸网络-https://www.xinac.net/9361.html 文章源自新逸网络-https://www.xinac.net/9361.html

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2023-03-01
  • 转载请注明:https://www.xinac.net/9361.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定