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

kotlin——设计模式之责任链模式

目录

 

介绍

应用场景

总结


介绍

责任链模式是一种行为设计模式,它允许将请求从一个对象传递到另一个对象,直到请求被处理为止。在责任链模式中,每个对象都有机会处理请求,但它们也可以选择将请求传递给下一个处理者。

使用责任链模式的场景包括:

  • 当有多个对象可以处理同一个请求时,但只有其中一个对象需要处理请求。
  • 当需要动态指定处理请求的对象。
  • 当需要按照一定顺序处理多个请求。

应用场景

点击按钮然后实现:校验数据是否正确,处理数据,记录到本地,发送请求。

示例代码: 

// 定义一个处理器接口interface ClickChain {fun setNext(handler: ClickChain): ClickChainfun handle(request: Request): Boolean}// 请求类data class Request(var data: String, var isValid: Boolean = false)// 校验数据的处理器class ValidationChain : ClickChain {private var nextHandler: ClickChain? = nulloverride fun setNext(handler: ClickChain): ClickChain {nextHandler = handlerreturn handler}override fun handle(request: Request): Boolean {// 校验数据request.isValid = request.data != ""if (!request.isValid) {println("数据校验失败")return false}println("数据校验通过")return nextHandler?.handle(request) ?: true}}// 处理数据的处理器class ProcessingChain : ClickChain {private var nextHandler: ClickChain? = nulloverride fun setNext(handler: ClickChain): ClickChain {nextHandler = handlerreturn handler}override fun handle(request: Request): Boolean {// 处理数据request.data = request.data.trim().uppercase()println("数据处理完成: ${request.data}")return nextHandler?.handle(request) ?: true}}// 记录到本地的处理器class LocalStorageChain : ClickChain {private var nextHandler: ClickChain? = nulloverride fun setNext(handler: ClickChain): ClickChain {nextHandler = handlerreturn handler}override fun handle(request: Request): Boolean {// 记录到本地println("数据已记录到本地: ${request.data}")return nextHandler?.handle(request) ?: true}}// 发送请求的处理器class NetworkRequestChain : ClickChain {override fun setNext(handler: ClickChain): ClickChain {throw UnsupportedOperationException("最后的处理器不支持设置下一个处理器")}override fun handle(request: Request): Boolean {// 发送网络请求println("发送网络请求: ${request.data}")return true}}// 主函数,模拟按钮点击处理fun main() {// 创建责任链val validationC = ValidationChain()val processingC = ProcessingChain()val localStorageC = LocalStorageChain()val networkRequestC = NetworkRequestChain()// 设置责任链validationC.setNext(processingC).setNext(localStorageC).setNext(networkRequestC)// 处理请求validationC.handle(Request(data = ""))}

总结

使用责任链模式可以避免大量的条件语句,使代码更加可扩展和可维护。同时,它也符合单一职责原则,每个处理者只需要关注自己的责任,而不需要关注其他的逻辑。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot 学习之路 -- 处理 HTTP 请求
  • 20240924软考架构-------软考191-195答案解析
  • 英飞凌TC3xx -- Bootstrap Loader分析
  • 基于FPGA+GPU异构平台的遥感图像切片解决方案
  • 汽车端到端自动驾驶系统的关键技术与发展趋势
  • EasyGBD国标GB28181设备端,支持GB28181-2016、GB28181-2022
  • 基于C#+SQL Server2008实现(CS界面)学生宿舍管理系统
  • 【Docker】深入理解 Docker Compose 文件:构建和管理多容器应用的指南
  • 基于OpenCV的单目测距
  • uniapp map使用非CSS 定位和固定高度来设置,避免拉伸父容器的高度
  • 《AI办公类工具表格处理系列之一——办公小浣熊》
  • java 洛谷题单【算法1-7】搜索
  • 第一章 HTTP
  • frp内网穿透部署
  • MATLAB软件开发通用控制的软件架构参考
  • 5、React组件事件详解
  • AHK 中 = 和 == 等比较运算符的用法
  • C语言笔记(第一章:C语言编程)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Docker 笔记(2):Dockerfile
  • HTTP 简介
  • JS+CSS实现数字滚动
  • Laravel 中的一个后期静态绑定
  • mockjs让前端开发独立于后端
  • PHP CLI应用的调试原理
  • Sass 快速入门教程
  • Theano - 导数
  • VuePress 静态网站生成
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 分布式熔断降级平台aegis
  • 简单基于spring的redis配置(单机和集群模式)
  • 简单数学运算程序(不定期更新)
  • 七牛云假注销小指南
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端学习笔记之观察者模式
  • 手机端车牌号码键盘的vue组件
  • 微信小程序:实现悬浮返回和分享按钮
  • 我与Jetbrains的这些年
  • Python 之网络式编程
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​补​充​经​纬​恒​润​一​面​
  • ### RabbitMQ五种工作模式:
  • #define与typedef区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)Jupyter Notebook 下载及安装
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (强烈推荐)移动端音视频从零到上手(上)
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (五)IO流之ByteArrayInput/OutputStream
  • (转) 深度模型优化性能 调参
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core 中间件与过滤器