1.什么是委托
委托(delegate)是函数指针的升级版。
一切皆地址:变量(数据)是以某个地址为起点的一段内存中所存储的值。
函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令。
直接调用:通过函数名来调用函数,CPU通过函数名直接获得函数所在地址并开始执行->返回。
间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数所在地址并开始执行->返回。
JAVA中没有与委托相对应的功能实体。
比较常用的有Action和Function,委托可以按照一定的约束来指向某些目标方法,帮助我们完成对这些方法的间接调用。
2.委托的声明(自定义委托)
目标方法返回值类型 目标方法参数值类型
3.委托的使用
(1)一般的使用
模板方法,借用指定的外部方法来产生结果。
相当于填空题。
常位于代码中部。
委托要有返回值。
回调(callback)方法,调用指定的外部方法。
相当于流水线
常位于代码末尾
委托无返回值
注意:这是一种方法级别的紧耦合,现实工作中要慎之又慎。
使可读性下降,debug的难度增加。
把委托回调,异步调用和多线程纠缠在一起,会让代码变得难以阅读和维护。
委托使用不当有可能造成内存泄露和程序性能下降。
4.委托的高级使用
多播委托(一个委托内封装着不止一个的方法)
第一个图是同步调用,第二三个图是异步调用