责任链模式Swift版
来源:互联网 发布:陈奕迅失忆蝴蝶知乎 编辑:程序博客网 时间:2024/06/06 06:29
事件角色案例
1、员工请假,要走流程。
2、ceo可以批10天假。
3、总监可以批5天假。
4、项目负责人可以批3天假。
5、由员工请假的天数决定哪个领导审批。
运行环境
1、xcode8以上
2、iOS10以上
3、swift3.0以上
步骤
第一步:新建抽象处理类->TXP_Leader(领导类)
//领导抽象类
//第一个特点:定义下一个节点
//第二个特点:定义处理方法
class TXP_Leader: NSObject {
var nextLeader:TXP_Leader?
//第二个特点:定义处理方法
final func handleExpense(expense:TXP_LeaveDay) {
if expense.getDay() <=self.limit() {
//满足要求,执行当前处理
self.handle(expense: expense)
} else {
//不满足要求执行下一个节点
self.nextLeader?.handleExpense(expense: expense)
}
}
func handle(expense:TXP_LeaveDay) {
}
//限制天数
func limit() -> Int {
return 0
}
}
第二步:新建抽象假条类(TXP_LeaveDay)
//请假天数抽象类
class TXP_LeaveDay: NSObject {
//请假类型名称(事假,病假,婚假)
var title:String?
//请假天数
var day:Int?
//请假具体原因
var body:String?
init(title:String?,body:String?,day:Int) {
super.init()
self.title = title
self.body = body
self.day = day
}
func getTitle() -> String? {
return self.title
}
func getBody() -> String? {
return self.body
}
func getDay() -> Int {
return self.day!
}
}
第三步:新建具体的领导类
TXP_CEO_Leader、TXP_Majordomo_Leader、TXP_Manager_Leader
//公司老板CEO
class TXP_CEO_Leader: TXP_Leader {
//CEO可以批10天假
override func limit() ->Int {
return 10
}
override func handle(expense:TXP_LeaveDay) {
print("请假标题是:\(expense.getTitle()!)")
print("请假内容是:\(expense.getBody()!)")
print("请假天数是:\(expense.getDay())")
print("CEO已批假....")
}
}
//公司总监
class TXP_Majordomo_Leader: TXP_Leader {
//总监可以批5天假
override func limit() ->Int {
return 5
}
override func handle(expense:TXP_LeaveDay) {
print("请假标题是:\(expense.getTitle()!)")
print("请假内容是:\(expense.getBody()!)")
print("请假天数是:\(expense.getDay())")
print("总监已批假....")
}
}
//公司项目管理者
class TXP_Manager_Leader: TXP_Leader {
//项目管理者可以批3天假
override func limit() ->Int {
return 3
}
override func handle(expense:TXP_LeaveDay) {
print("请假标题是:\(expense.getTitle()!)")
print("请假内容是:\(expense.getBody()!)")
print("请假天数是:\(expense.getDay())")
print("项目管理者已批假....")
}
}
第四步:测试
override func viewDidLoad() {
super.viewDidLoad()
self.demo1()
}
func demo1() {
let ceoLeader = TXP_CEO_Leader()
let majordomoLeader = TXP_Majordomo_Leader()
let managerLeader = TXP_Manager_Leader()
managerLeader.nextLeader = majordomoLeader
majordomoLeader.nextLeader = ceoLeader
let expense = TXP_LeaveDay(title: "婚假", body: "我要娶白富美啦!,快快批假", day: 8)
managerLeader.handleExpense(expense: expense)
}
GIT 代码demo
demo
- 责任链模式Swift版
- Swift设计模式之责任链模式
- 责任链设计模式(理论版)
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- linux socket tcp server 解决客户端socket断开后, 服务器端进程退出的问题
- linux使用过程中遇到的问题
- 加解密技术(Cryptography)基本概念
- electron入门
- 退出登录清楚以前的activity
- 责任链模式Swift版
- 通过tmux远程
- Nginx负载均衡概览
- 0x757da832 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0052f888 处的 cv::Exception。
- Linux wget详解
- Redis学习笔记之十二:Redis复制(数据同步)
- webpack学习入门(4个核心概念)
- Coursera-Deep Learning Specialization 课程之(四):Convolutional Neural Networks: -weak1编程作业
- Linux基础练习题(9)