什么是回调函数?
回调函数就是一个被作为参数传递的函数
为什么有回调函数?
当程序需要运行时灵活性的时候需要引入回调函数
如:
1.调用者不知道具体事件发生时需要调用的具体函数
2.被调函数不知道何时被调用,只知道需要完成的任务
回调机制的原理?
当具体事件发生时,调用者通过函数指针来调用具体函数
回调机制中的调用者和被调函数互不依赖。从而满足了灵活性
如何使用回调函数?
举例:在java中
没有使用回调函数前:
public void sendMessage() {
System.out.println("米老师发消息:请给我开门");
ReceiveMessager.receiveMessageStatic();
}
使用回调函数后:
在运行期间通过Class对象调用以传入方法的名字字符串为参数获取到的Method类型的对象,也就是说,根据传入方法的名字可以获取到对应的方法对象,而回调的时候传入一个要执行此方法的对象即可,这里可以理解为将一个参数传入,正是传入的这个对象的信息才决定了要执行哪个对象的此方法,而回调函数本质就是讲一个方法给参数化。
public void sendMessage(String classPath,String heMethodPath) {
System.out.println("我是米老师,请给我开门");
//(1) 加载类 返回 class 类型的对象classHeClass
Class classHeClass = Class.forName(classPath);
//(2、)通过 类型对象 得到加载的类 He类 的对象实例
Object classHeObject = classHeClass.newInstance();
// System.out.println("运行类型"+classHeObject.getClass());
//(3、)通过cls得到你的加载类 he getMessage 的方法对象
// 在反射中,可以把方法当做对象
Method heopenMethod = classHeClass.getMethod(heMethodPath);
//(4)通过heopenMethod调用方法:通过方法对象来实现调用方法
//反射机制 方法.invoke(对象)
heopenMethod.invoke(classHeObject);
回调函数的意义
增加程序的灵活性,将原来写死在代码中的耦合关系解开,变成在运行时才确定谁和谁发生关系,这是一种弱耦合。