设计模式之 Chain of Responsibility 责任链模式:Swift 实现

Chain of Responsibility 责任链模式


We set a chain of responsibility. Then it t allow the solver solve the request or sends the request to the next another solver. As the diagram shown below, the handler is one solver of the chain.
我们设定了一条责任链,然后它允许处理者选择处理请求或者将请求发送给下一个其它的处理者。下图中,handler 是责任链上的一个处理者。

责任链模式

// Problem wait to be solve
class Request {
    var priority: Int
    var s: String
    init(p: Int, s: String) {
        priority = p
        self.s = s
    }
}

// Handler
protocol Thought {
    func solve(r: Request)
}

// Base handler
class People: Thought {
    
    var next: People?
    func setNext(next: People) {
        self.next = next
    }
    func solve(r: Request) {
        if let n = next {
            n.solve(r: r)
        } else {
            print("No people want to solve")
        }
    }
    
}

// Concrete handler
class Guard: People {
    override func solve(r: Request) {
        if r.priority < 2 {
            print("Just be sovled by Guard [\(r.s)]")
            print(r.s)
        } else {
            super.solve(r: r)
        }
    }
    
}

// Concrete handler
class Commander: People {
    override func solve(r: Request) {
        if r.priority < 4 {
            print("Commander solve [\(r.s)]")
        } else {
            super.solve(r: r)
        }
    }
}

// Concrete handler
class Leader: People {
    override func solve(r: Request) {
        if r.priority < 10 {
            print("Leader come and solve [\(r.s)]")
        } else {
            super.solve(r: r)
        }
    }
}

let g = Guard()
let c = Commander()
let l = Leader()
g.setNext(next: c)
c.setNext(next: l)

let r = Request(p: 9, s: "Let us in")
g.solve(r: r)

以上代码中,Guard 、Commander、leader 具有不同的权限可以处理请求,首先是设定它们之间的关系,顺序是 g、c、l,从而构建一条责任链。处理请求时,从 g 开始,若当前处理结点能够处理,则立即处理,若当前结点无法处理,则交给下一个处理结点。


有判断,处理力所能及的事情,若超过能力范围,则把任务交给他人。
若没有判断而直接处理,则属于主动承担责任,值得鼓励但长期运行不利于整体发展。
若没有判断,也不处理,就把任务交给他人,则属于推卸责任。

在界面的响应中,叠在一起的 view ,使用了责任链对触发事件进行响应,若最顶层的 view 收到事件,它可以选择处理事件,也可以选择把事件传递给下一层,这取决于具体的业务需要,我们可以对它进行设置事件响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值