版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xu__cg/article/details/53166207
今天刚好学了一下设计模式中的观察者模式,其中涉及到了回调的相关内容,以前也经常用到回调函数,今天稍微总结一下相关内容。
回调
所谓回调:简单来说就是,A对象调用了自己的方法a,方法a接收的参数是B接口的实例b,而在方法a中将执行接口B中的方法c。
这样解释可能有点绕不过来,下面我们来看一个例子:
比如宿舍的某个同学设置了一个闹铃,闹铃响时全宿舍的人都能听到,但是张三比较勤奋,听到铃声后起床了,李四比较懒,听到铃声后还要睡会。我们可以把闹铃发出的铃声看作是接口(B),张三(b)和李四(b)都实现了这个“接口”,闹铃(A)到一定时间后就要“响铃”,响铃就要发出“铃声”(a),“铃声”就去叫人(c),至于人会做什么就是人本身的事情。
其中的回调结构:
- 抽象回调接口:上述B即为回调接口,其中定义了需要回调的函数。
- 具体回调实现类:实现回调接口,实现其具体功能。如上述:张三,李四。
- 调用回调方法类:回调类中实现回调方法,回调方法中包含回调接口参数。
代码如下:
抽象回调接口:
public interface CallPerson {
void doCallPerson();
}
具体回调实现类:
public class ZhangSan implements CallPerson{
private String name="张三";
public String getName(){
return this.name;
}
public void doCallPerson() {
System.out.println(getName()+"听到铃声,起床了!");
}
}
public class LiSi implements CallPerson{
private String name="李四";
public String getName(){
return this.name;
}
public void doCallPerson() {
System.out.println(getName()+"听到铃声,没起床!");
}
}
调用回调方法类:
public class Alarm {
//响铃
public void ring(CallPerson call){
call.doCallPerson();
}
}
客户端测试:
public class Client {
public static void main(String[] args) {
Alarm alarm=new Alarm();
alarm.ring(new ZhangSan());
alarm.ring(new LiSi());
}
}
//输出结果
张三听到铃声,起床了!
李四听到铃声,没起床!
好了简单的解释了一下回调机制,大家可以写一写小Demo测试熟悉一下,毕竟单看看是不好了解的。