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

news/2024/9/29 1:23:05/

目录

 

介绍

应用场景

总结


介绍

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

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

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

应用场景

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

示例代码: 

// 定义一个处理器接口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 = ""))}

总结

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


http://www.ppmy.cn/news/1531305.html

相关文章

STM32嵌入式编程学习到提高:【4】UART串口打印

------------------------------------------------------------------------------------------------------------------------- 工程文件:放在百度云盘里,需要的自行下载!!! 链接: https://pan.baidu.com/s/14gRne…

PSS-sdy_opengl_sdd

PSS-sdy_opengl_sdd是一个基于商用工具SCADE Display(OpenGL)的二次开发项目。 该项目构建的工具可用于生成SCADE Display(OpenGL)软件模型的软件设计文档。其设计思想详见: SCADE Display(OpenGL&#xf…

The First项目报告:探索Yield Guild Games运行机制与发展潜力

在探索数字娱乐与金融融合的全新疆域中,GameFi(游戏化金融)以其独特的魅力引领了一场前所未有的变革。这一创新概念,最初由MixMarvel的CSO Mary Ma在2019年底乌镇大会的远见卓识中首次提出,它将去中心化金融&#xff0…

uniapp APP自动更新组件

在uniapp中实现APP自动更新功能,主要涉及到客户端在功能不断迭代过程中,需要进行自动更新。uniapp一个详细的实现步骤,包括客户端和服务器端的配置: 服务器端配置 版本信息管理 服务器端需要维护一个数据库或配置文件&#xff…

零基础入门AI:一键本地运行各种开源大语言模型 - Ollama

什么是 Ollama? Ollama 是一个可以在本地部署和管理开源大语言模型的框架,由于它极大的简化了开源大语言模型的安装和配置细节,一经推出就广受好评,目前已在github上获得了46k star。 不管是著名的羊驼系列,还是最新…

2024年10月计划(工作为主,Ue5独立游戏为辅,)

我发现一点,就是工作很忙,比如中秋也在远程加班,周末有时也远程加班,国庆节甚至也差点去甲方工作。甚至有可能驻场。可见,小公司确实不能去。 好在,9月份时,通过渲染 除了上班时间外&#xff0…

js设计模式(26)

js设计模式(26) JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表: 一、创建型模式 这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。 工厂模…

探索低功耗TF卡的录音解决方案

TF卡 TF卡,也称为Micro SD卡或TransFlash卡,是一种流行的小型存储卡,广泛应用于手机、平板电脑、相机和其他便携式设备。TF卡的尺寸非常小,便于携带和使用,不会占用太多设备空间。而且TF卡提供多种容量选择&#xff0…