欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java设计模式—责任链模式

发布时间:2025/5/22 java 166 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java设计模式—责任链模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

    

责任链模式的定义:

        使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

 

责任链模式的重点是在“”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果。


责任链模式的通用类图如下所示:

 

通用源代码:

package com.package4; public class Test4{public static void main(String[] args){//声明所有的处理节点Handler handler1 = new ConcreteHandler1();Handler handler2 = new ConcreteHandler2();Handler handler3 = new ConcreteHandler3();//设置链中的阶段顺序1-->2-->3handler1.setNext(handler2);handler2.setNext(handler3);//提交请求,返回结果Response response = handler1.handleMessage(new Request());} }abstract class Handler {private Handler nextHandler;//每个处理者都必须对请求做出处理 public final Response handleMessage(Request request){Response response = null; //判断是否是自己的处理级别if(this.getHandlerLevel().equals(request.getRequestLevel())){response = this.echo(request);}else{ //不属于自己的处理级别//判断是否有下一个处理者if(this.nextHandler != null){response = this.nextHandler.handleMessage(request);}else{//没有适当的处理者,业务自行处理}}return response;}//设置下一个处理者是谁public void setNext(Handler _handler){this.nextHandler = _handler;}//每个处理者都有一个处理级别protected abstract Level getHandlerLevel();//每个处理者都必须实现处理任务protected abstract Response echo(Request request); }class ConcreteHandler1 extends Handler {//定义自己的处理逻辑protected Response echo(Request request) {//完成处理逻辑return null; }//设置自己的处理级别protected Level getHandlerLevel() {//设置自己的处理级别return null;} } class ConcreteHandler2 extends Handler {//定义自己的处理逻辑protected Response echo(Request request) {//完成处理逻辑return null;}//设置自己的处理级别protected Level getHandlerLevel() {//设置自己的处理级别return null;} }class ConcreteHandler3 extends Handler {//定义自己的处理逻辑protected Response echo(Request request) {//完成处理逻辑return null;}//设置自己的处理级别protected Level getHandlerLevel() {//设置自己的处理级别return null;} }class Level {//定义一个请求和处理等级 } class Request {//请求的等级public Level getRequestLevel(){return null;} } class Response {//处理者返回的数据 }抽象的处理者实现三个职责:


一是定义一个请求的处理方法handle Message,唯一对外开放的方法;

二是定义一个链的编排方法setNext,设置下一个处理者;

三是定义了具体的请求者必须实现的两个方法:定义自己能够处理的级别get Handler Level和具体的处理任务echo。


/*************************************************************************************************

注意handler Message方法前的final关键字,模板方法模式中的模板方法也是final类型的。

**************************************************************************************************/

1、责任链模式的优点:

责任链模式非常显著的优点是将请求和处理分开。


2、责任链模式的缺点:

一是性能问题,每个请求都是从链头遍历到链尾,特别是在链比较长的时候,性能是一个非常大的问题。

二是调试不很方便,特别是链条比较长,环节比较多的时候,由于采用了类似递归的方式,调试的时候逻辑可能比较复杂。


3、使用责任链模式的注意事项:

链中节点数量需要控制,避免出现超长链的情况,一般的做法是在Handler中设置一个最大节点数量,在setNext方法中判断是否已经是超过其阈值,超过则不允许该链建立,避免无意识地破坏系统性能。

 

 

 

 

 

转载于:https://www.cnblogs.com/lanzhi/p/6467299.html

总结

以上是生活随笔为你收集整理的Java设计模式—责任链模式的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。