Java回调机制简单讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 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测试熟悉一下,毕竟单看看是不好了解的。

猜你喜欢

转载自blog.csdn.net/xu__cg/article/details/53166207