使用处理请求的模式,它是让多个处理器都有机会处理该请求,知道其中某个处理成功为止,责任链模式把多个处理器串成链,然后让请求在链传递。如果当前的处理器无法处理则交给下一个处理器处理。
- 定义一个抽象处理类
import Foundation
// 角色一: 抽象的处理对象
class Leader {
var nextLeader: Leader? //下一个处理者
//处理请求
func handleBill(bill: ReimbursementBill) {
//条件成立完成处理
if self.getMaxMoneny() > bill.money {
self.handle(bill: bill)
}
//否则交给下一个处理者处理事件
else {
self.nextLeader?.handleBill(bill: bill)
}
}
//用函数返回这个处理者的最大处理能力
func getMaxMoneny() -> Float {
return 0
}
func handle(bill: ReimbursementBill) {
}
}
复制代码
- 客户端请求者
import Foundation
// 角色三: 抽象的请求角色
class ReimbursementBill {
var name: String
var money: Float
init(name: String, money: Float) {
self.name = name
self.money = money
}
}
复制代码
- 具体处理者1
import Foundation
// 角色二: 具体角色 (组长)
class GroupLeader: Leader {
override func getMaxMoneny() -> Float {
return 1000
}
override func handle(bill: ReimbursementBill) {
print("组长报销内容: \(bill.name) 报销金额: \(bill.money)")
}
}
复制代码
- 具体处理者2
import Foundation
class ChargeLeader: Leader {
override func getMaxMoneny() -> Float {
return 5000
}
override func handle(bill: ReimbursementBill) {
print("主管报销内容: \(bill.name) 报销金额: \(bill.money)")
}
}
复制代码
- 具体处理者3
import Foundation
class CEOLeader: Leader {
override func getMaxMoneny() -> Float {
return 10000
}
override func handle(bill: ReimbursementBill) {
print("老板报销内容: \(bill.name) 报销金额: \(bill.money)")
}
}
复制代码
- 调用
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let group = GroupLeader()
let charge = ChargeLeader()
let ceo = CEOLeader()
group.nextLeader = charge
charge.nextLeader = ceo
let bill = ReimbursementBill(name: "Mac 电脑", money: 6780)
group.handleBill(bill: bill)
}
}
复制代码
-
结果:老板报销内容: Mac 电脑 报销金额: 6780.0
-
项目中的具体使用可以是其他场景
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)