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