12_Responsibility Chain Mode

1. Chain of Responsibility

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)
    }
}

Second, the filter

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"
    }
}

Three, the main program call

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)
}

Four, running results

Guess you like

Origin blog.csdn.net/Duckdan/article/details/110655633