参考文章&图片来源:https://medium.com/@text2dipak/c-interview-prep-1-delegates-vs-events-1b6ef656d046
委托是一种类型安全的函数指针,用于指向签名匹配的方法
为什么使用
参考回调函数,解除被调用者与调用者之间的耦合性
使用委托之前:
如下代码客户端与请求操作LengthOperaion耦合度高
Method callback without delegate
使用委托之后:
解除客户端与请求的耦合:
- 无需将客户端注入请求
- 修改客户端回调方法时,无需修改Operation
- Operation可以在无需修改的情况下,给其它客户端调用
ps:委托有两种类型
1.单一委托
2.多播委托
event
事件是一种封装的委托
主要分为两部分 -- 类似于观察者模式
-
推送者
唯一,定义事件,在符合特定条件下进行推送
-
订阅者
一或多,监听推送者的事件推送。提供一个方法(委托)给推送者,等满足特定条件时由推送者调用
Event publisher
Q & A:
- Q:委托是否可以为空 ?
A:Yes - Q:事件与委托的关系?
A:事件是一种特殊封装的委托 - Q:事件是否可以用委托来实现?
A:可以 - Q:事件存在的意义? ---重点
A:事件不支持 ‘ = ’ 的操作,防止客户端(注册者)使用 ‘ = ’ 重置了委托的订阅者方法清单,
只允许添加或者移除