Osheep

时光不回头,当下最重要。

Swift-职责链模式

职责链模式将多个对象组成一条职责链,然后按照它们在之职责链上的顺序一个个找出到底应该谁来处理负责.(Avoid coupling the sender of a request to itsreceiver by giving morethan one objecta chance to handle the request.Chain the receiving objects andpassthe request along the chain until an object handles it. )

《Swift-职责链模式》

职责链.jpg

处理者角色(Hanlder):定义一个处理请求的接口,和一个后继连接(可选).

具体的处理者(ConcreteHandler):处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者.

客户类(Client):向一个链上的具体处理者ConcreteHandler对象提交请求.

职责链的模式现实生活中例子有很多比如报销,你需要找你的主管,主管需要找上级,层层上报,申请涨薪,贷款申请,医院看病,按照社会的分工每个人都有自己的位置,需要有人为最终的事情负责.
以报销为例子:

class Employee {

    var superior:Employee?

    func applyReimbursement(money:Float) { }
}

class Director: Employee { // 主管

    override func applyReimbursement(money: Float) {

        if money <= 0 {
            return
        }

        if money <= 200 {
            print("\(money)报销---主管同意")
        } else {
            self.superior?.applyReimbursement(money: money)
        }
    }
}

class TechnologyLeader: Employee { // 技术负责人

    override func applyReimbursement(money: Float) {
        if money <= 200 {
            return
        }

        if money > 200 && money < 1000 {
            print("\(money)报销---技术负责人同意")
        } else {
            self.superior?.applyReimbursement(money: money)
        }
    }
}

职责链模式弱化了客户端和处理端之间关系,客户端只需要发起请求即可获得最终的结果,不用关心最终是谁处理的事情,同样因为处理是封闭的,也可以动态的修改处理过程,带来的问题可能会造成处理延迟.

点赞