Java设计模式(二)回调模式

在学习Java的路上很早很早就接触了回调,比如:JFrame的键盘事件,JFrame控件的点击事件,线程池执行之前的方法beforeExecute与执行之后的方法 afterExecute,线程的Run方法其原理就是使用了回调。之前一直没有研究过其原理,在这里学习一下回调模式,也方便理解事件监听模式和观察者模式。

回调模式

在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序

在这里插入图片描述

可能会有这样一个需求,某开发者想在线程执行之后做一些事情,你可能想到的方法就是在线程的run方法体内做这些操作,这样固然能实现,可是却使得各种业务耦合在一起。最好的解决方法就是使用回调模式。

首先定义回调接口

public interface Callback {
  	void call();
}

定义一个抽象类ThreadHolder,提供了两个run方法,一个可以传递回调参数的方法,一个无参方法

abstract class ThreadHolder {

    public final void run(Callback callback) {
        run();
        if (callback != null) {
            callback.call();
        }
    }

    public abstract void run();

}

然后实现一个简单的线程任务,继承ThreadHolder 并重写run方法

class SimpleThread extends ThreadHolder {

    @Override
    public void run() {
        System.out.println("做一些事情。。。");
    }
}

测试

public class CallBackTest {

    public static void main(String[] args) {

        Callback callback = () -> System.out.println("事情做完了,我要做其它事情了");

        SimpleThread simpleThread = new SimpleThread();

        simpleThread.run(callback);

    }


}

测试结果:

做一些事情。。。
事情做完了,我要做其它事情了

通过这个实例,我们可以看到使用回调模式实现了我们的功能。在底层代码,即ThreadHolder中我们就制定了空方法执行顺序,在高层重写空的方法,然后在执行时我们实现的方法就会被底层调用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章