设计模式 - 责任链模式 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("审批失败")
    }
}
相关推荐
暗碳1 小时前
安卓usb摄像头/采集卡专用软件
android
李少兄1 小时前
在 Linux 中精准查找名为 `xxx` 的文件或目录路径
android·linux·adb
2501_916008891 小时前
App 上架服务行业的实际工作流程与工具选择 从人工代办到跨平台自动化的转变
android·运维·ios·小程序·uni-app·自动化·iphone
雨中飘荡的记忆1 小时前
设计模式之桥接模式详解
设计模式·桥接模式
zhimingwen1 小时前
macOS 上安装与配置apksigner (读取APK签名的工具)
android·macos· sha-1
雨中飘荡的记忆1 小时前
设计模式之访问者模式详解
设计模式·访问者模式
Jomurphys2 小时前
设计模式 - 享元模式 Flyweight Pattern
android·设计模式·享元模式
Jomurphys2 小时前
设计模式 - 组合模式 Composite Pattern
android·设计模式·组合模式
.豆鲨包2 小时前
【Android】深入理解Window和WindowManager
android·java