12_责任链模式

本文介绍了一种行为设计模式——责任链模式,并通过示例代码展示了如何使用Kotlin实现请求处理的责任链。该模式有助于解耦请求发送者和接收者,支持动态配置请求处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、责任链

package com.study.responsibility.kotlin

/**
 * 责任链
 */
class FilterChain {
    private var filterList = mutableListOf<Filter>()
    var index = 0
    fun addFilter(filter: Filter): FilterChain {
        filterList.add(filter)
        return this
    }

    /**
     * 类似过滤器的递归调用,当index的值等于责任链中的过滤器个数时
     * 就停止递归
     */
    fun doFilter(request: Request, response: Response) {
        if (index == filterList.size) return
        val filter = filterList[index]
        index++
        filter.doFilter(request, response, this)
    }
}

二、过滤器

package com.study.responsibility.kotlin

/**
 * 日志过滤器
 */
class LogFilter:Filter {
    override fun doFilter(request: Request, response: Response, chain: FilterChain) {
        request.requestName += "——LogFilter"
        chain.doFilter(request, response)
        response.responseName += "——LogFilter"
    }
}
package com.study.responsibility.kotlin

/**
 * 缓存过滤
 */
class CacheFilter : Filter {
    override fun doFilter(request: Request, response: Response, chain: FilterChain) {
        request.requestName += "——CacheFilter"
        chain.doFilter(request, response)
        response.responseName += "——CacheFilter"
    }
}

三、主程序调用

package com.study.responsibility.kotlin


/**
 * 定义:为请求创建一个接受此次请求对象的链
   类型:行为型
   适用场景
   一个请求的处理需要多个对象中的一个或者多个相互协作

   优点
   请求的发送者和接收者(请求的对象)解耦
   责任链可以动态组合

    缺点
    责任链太长或者处理时间过长,影响性能
    责任链有可能过多
 */
fun main() {
    var request = Request("中国")
    var response = Response("超级中国")

    var filterChain = FilterChain()
    filterChain.addFilter(LogFilter()).addFilter(CacheFilter())

    filterChain.doFilter(request, response)
    println(request.requestName)
    println(response.responseName)
}

四、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值