一、概述
责任链模式,从分类上讲,是23种设计模式中的一种行为设计模式。
责任链模式(Chain of Responsibility Pattern),顾名思义,为请求创建了一个接收者对象的链,对请求的发送者和接收者进行解耦,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
使用场景:在处理消息的时候需要多级过滤或处理。
举个栗子,OA请假申请,各级领导审批权限和次序是不同的,请求就在链条上传递,直到审批处理。
二、UML图
三、代码例子
//事务类(请假申请)
class Affairs(var name:String,var degree:Int) {
}
abstract class Handler {
var upper:Handler ?= null
var name:String ?= null
var level:Int ?= null //处理事务的等级
abstract fun handle(affairs: Affairs)
}
class concreteHandler :Handler{
constructor()
constructor(level:Int,name:String){
this.level = level
this.name = name
}
override fun handle(affairs: Affairs) {
level?.let {
if (it >= affairs.degree){
Log.i("TAG","$name handle ${affairs.name}")
}else {
upper?.handle(affairs)
}
}
}
}
fun test(){
var leader = concreteHandler(1,"小组长")
var manager = concreteHandler(2,"经理")
var boss = concreteHandler(3,"boss")
leader.upper = manager
manager.upper = boss
leader.handle(Affairs("审批",2))
}