设计模式 - 责任链模式 Chain of Responsibility Pattern

一、概念

通过将多个处理器(处理对象)以链式结构连接起来,使得请求沿着这条链传递,直到有一个处理器处理该请求为止。

|-----------------------|---------------------------------------------|
| Handler 处理器接口 | 所有处理器必须实现同一个接口。通常包含一个处理请求的方法和一个指向下一个处理者的引用。 |
| ConcreteHandler 具体处理器 | 负责处理请求。能处理就处理,否则将请求传递给下一个处理器。 |

二、实现

2.1 处理器接口

Kotlin 复制代码
interface IBudgetHandler {
    fun setNextHandler(nextHandler: IBudgetHandler)
    fun handle(amount: Int): Boolean
}

2.2 具体处理器

最终处理器 CFO 对设置下一个处理器空实现,超出处理范围直接返回false。

Kotlin 复制代码
class GroupLeader : IBudgetHandler {
    private var nextHandler: IBudgetHandler? = null

    override fun setNextHandler(nextHandler: IBudgetHandler) {
        this.nextHandler = nextHandler
    }

    override fun handle(amount: Int): Boolean = if (amount < 100) {
        println("组长:100元以内批了")
        true
    } else {
        nextHandler?.handle(amount) ?: false
    }
}

class Manager : IBudgetHandler {
    private var nextHandler: IBudgetHandler? = null

    override fun setNextHandler(nextHandler: IBudgetHandler) {
        this.nextHandler = nextHandler
    }

    override fun handle(amount: Int): Boolean = if (amount < 1000) {
        println("经理:1000元以内批了")
        true
    } else {
        nextHandler?.handle(amount) ?: false
    }
}

class CFO : IBudgetHandler {
    override fun setNextHandler(nextHandler: IBudgetHandler) {}

    override fun handle(amount: Int): Boolean = if (amount < 10000) {
        println("首席财务官:10000元以内批了")
        true
    } else {
        println("金额超出最大权限,无法批准")
        false
    }
}

2.3 使用

Kotlin 复制代码
fun main() {
    val groupLeader = GroupLeader()
    val manager = Manager()
    val cfo = CFO()

    groupLeader.setNextHandler(manager)
    manager.setNextHandler(cfo)

    if (groupLeader.handle(7000)) {
        print("审批成功")
    } else {
        print("审批失败")
    }
}
相关推荐
2301_771717216 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
dvjr cloi7 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
灰子学技术8 小时前
Envoy 使用的设计模式技术文档
设计模式
随遇丿而安9 小时前
第2周:`EditText` 不只是输入框,它是 Android 输入体验的第一道门
android
我命由我123459 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
一起搞IT吧9 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
小书房14 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo15 小时前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw
xxjj998a15 小时前
Laravel4.x核心特性全解析
android·mysql·laravel
JoshRen16 小时前
2026教程:在Android Termux中集成Gemini 3镜像站实现移动端文档自动处理与摘要生成(附国内免费方案)
android