当前位置: 首页 > wzjs >正文

有什么推荐的网站苏州百度推广代理商

有什么推荐的网站,苏州百度推广代理商,.net php开发网站开发,wordpress中函数get责任链模式详解 1. 定义: 责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。它将请求的发送者和接收者解耦,允许你将请求沿着处理者链进行传递,直到有一个处理者处理它为止。每个处理者都包含对下一个处理者的引用&…

责任链模式详解

1. 定义:

责任链模式 (Chain of Responsibility Pattern) 是一种行为型设计模式。它将请求的发送者和接收者解耦,允许你将请求沿着处理者链进行传递,直到有一个处理者处理它为止。每个处理者都包含对下一个处理者的引用,形成一条链。

2. 结构:

  • Handler (抽象处理者): 定义一个处理请求的接口,并维护一个指向下一个处理者的引用。
  • ConcreteHandler (具体处理者): 实现 Handler 接口,处理它所负责的请求。如果可以处理请求,则处理;否则,将请求转发给下一个处理者。
  • Client (客户端): 创建处理者链,并向链中的第一个处理者提交请求。

3. 工作流程:

  1. 客户端创建一个请求,并将其发送给责任链中的第一个处理者。
  2. 每个处理者依次检查是否能够处理该请求。
  3. 如果能够处理,则处理请求,并且可以选择是否将请求继续传递给下一个处理者。
  4. 如果不能处理,则将请求传递给下一个处理者。
  5. 如果没有任何处理者能够处理请求,则请求可能不会被处理(或者可以有一个默认的处理者)。

4. 优缺点:

  • 优点:

    • 降低耦合度: 请求的发送者和接收者解耦,客户端不需要知道哪个处理者会处理请求。
    • 增强灵活性: 可以动态地添加、删除或修改处理者,改变处理请求的顺序。
    • 可扩展性好: 可以方便地添加新的处理者,扩展系统的功能。
    • 符合单一职责原则: 每个处理者只需要关注自己的职责。
    • 符合开闭原则: 无需修改现有代码,就可以添加新的处理者。
  • 缺点:

    • 性能问题: 如果责任链过长,或者每个处理者都要进行复杂的判断,可能会影响性能。
    • 调试困难: 如果责任链配置不当(例如,循环引用),可能会导致请求无法被处理,或者被错误的处理者处理,增加了调试的难度。
    • 不保证被处理: 请求可能会沿着链传递到末尾,但没有任何处理者处理它(可以设置一个默认的处理者来处理这种情况)。

5. 代码示例 (Java):

// 抽象处理者 (Handler)
abstract class Handler {protected Handler nextHandler;public void setNextHandler(Handler nextHandler) {this.nextHandler = nextHandler;}public abstract void handleRequest(Request request);
}// 具体处理者 (ConcreteHandler)
class ConcreteHandler1 extends Handler {@Overridepublic void handleRequest(Request request) {if (request.getType() == RequestType.TYPE1) {System.out.println("ConcreteHandler1 handles request: " + request.getDescription());} else if (nextHandler != null) {nextHandler.handleRequest(request);} else {System.out.println("No handler can process this request.");}}
}class ConcreteHandler2 extends Handler {@Overridepublic void handleRequest(Request request) {if (request.getType() == RequestType.TYPE2) {System.out.println("ConcreteHandler2 handles request: " + request.getDescription());} else if (nextHandler != null) {nextHandler.handleRequest(request);}else {System.out.println("No handler can process this request.");}}
}// 请求
enum RequestType{TYPE1, TYPE2, TYPE3
}
class Request {private RequestType type;private String description;public Request(RequestType type, String description) {this.type = type;this.description = description;}public RequestType getType() {return type;}public String getDescription() {return description;}
}// 客户端 (Client)
public class ChainOfResponsibilityExample {public static void main(String[] args) {// 创建处理者Handler handler1 = new ConcreteHandler1();Handler handler2 = new ConcreteHandler2();// 构建责任链handler1.setNextHandler(handler2);// 创建请求Request request1 = new Request(RequestType.TYPE1, "Request 1");Request request2 = new Request(RequestType.TYPE2, "Request 2");Request request3 = new Request(RequestType.TYPE3, "Request 3");// 发送请求handler1.handleRequest(request1); // ConcreteHandler1 handles request: Request 1handler1.handleRequest(request2); // ConcreteHandler2 handles request: Request 2handler1.handleRequest(request3); // No handler can process this request.}
}

在 Spring Boot 项目中的使用场景

  1. 请求过滤和拦截 (Filters and Interceptors):

    • Servlet 过滤器 (Filter): 最典型的应用.
    • Spring Security: 使用责任链模式来实现请求的认证和授权。
    • Spring MVC 的拦截器 (HandlerInterceptor): 拦截请求,进行预处理和后处理。
    // 示例:自定义拦截器 (Spring MVC)
    public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 执行拦截逻辑if (/* 满足条件 */) {return true; // 继续执行后续的拦截器和处理器} else {return false; // 阻止请求继续执行}}// postHandle, afterCompletion 方法 (可选)
    }// 配置拦截器链 (Spring Boot)
    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); // 拦截所有请求// 可以添加多个拦截器,形成拦截器链}
    }
    
  2. 异常处理 (Exception Handling):

    • Spring 的 @ExceptionHandler 机制。
    // 示例:自定义异常处理器 (Spring MVC)
    @ControllerAdvice
    public class GlobalExceptionHandler {@ExceptionHandler(MyCustomException.class)public ResponseEntity<String> handleMyCustomException(MyCustomException ex) {return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());}@ExceptionHandler(Exception.class)public ResponseEntity<String> handleGenericException(Exception ex) {return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");}
    }
    
  3. 日志处理 (Logging):

    • Logback、Log4j2 等日志框架的 Appender 机制。
  4. 审批流程 (Approval Workflow):

    • OA 系统、工作流引擎。
  5. 事件处理 (Event Handling):

    • 自定义事件处理链。
  6. 数据校验 (Data Validation):

    • 多级校验器。
        // 示例:数据校验 (与之前示例相同)public interface Validator {boolean validate(String data);}public class NotNullValidator implements Validator {@Overridepublic boolean validate(String data) {return data != null;}}// 其他校验器 (NotEmptyValidator, MaxLengthValidator, ...)public class ValidationChain {private List<Validator> validators = new ArrayList<>();public void addValidator(Validator validator) {validators.add(validator);}public boolean validate(String data) {for (Validator validator : validators) {if (!validator.validate(data)) {return false;}}return true;}}
    
  7. Spring Cloud Gateway 的 Filter:

    • Spring Cloud Gateway 使用责任链模式来处理请求。
    • 可以自定义 Filter,实现各种功能,例如:
      • 身份验证
      • 请求限流
      • 请求转发
      • 请求日志

总结:

责任链模式是一种非常实用的设计模式,在 Spring Boot 项目中有很多应用场景。 Spring 框架本身也大量使用了责任链模式(例如,Servlet 过滤器、Spring Security、Spring MVC 拦截器)。

http://www.dtcms.com/wzjs/135077.html

相关文章:

  • 合肥响应式网站设计成功的网络营销案例及分析
  • 婚庆 网站模板班级优化大师官方网站
  • 网站充值平台怎么做的百度seo排名原理
  • 国外产品展示网站源码网站设计与制作公司
  • 网页素材网站有哪些外贸网站建设公司
  • 公司做宣传网站发票可以抵扣不郑州seo培训班
  • wordpress建网站详细教程平台怎么推广技巧
  • wordpress点击图片不显示不出来seo搜索引擎优化推荐
  • 简洁风格的网站模板免费下载整站seo优化哪家好
  • 去除wordpress底部版权信息廊坊seo整站优化软件
  • 小城市门户网站建设方案永久域名查询
  • 门户网站制作seo实战技巧
  • 泰宁县建设局网站万网商标查询
  • 怎样做公司网站网站排名优化服务
  • 南通seo网站优化软件电商网站平台有哪些
  • 公司网站seo优化的关键词免费网站
  • 梧州网站推广费用百度推广下载安装
  • 深圳 网站建设培训学校广告代理商
  • 打开网站说建设中是什么问题百度关键词
  • 深圳做积分商城网站设计国内新闻今日头条
  • 网页设计主要学什么内容排名优化公司哪家好
  • 大剧院网站建设市场监督管理局是干什么的
  • 网站底部源码google谷歌搜索主页
  • 自己做网站怎么加定位站长之家端口扫描
  • 做网站用什么系统较好免费网站推广网站破解版
  • 网站副标题wordpress此网站三天换一次域名
  • 天津谷歌优化公司青岛官网seo公司
  • 做网站用织梦好吗新网域名查询
  • 自建站做seo合肥搜索引擎推广
  • 郑州网站建设哪家有百度搜索引擎api