`

Dev-No.03 Java中回调函数的实现

阅读更多

 

1、Java的接口支持提供了一种获得回调的等价功能的机制。其技巧就是:定义一个简单接口,并在该接口中声明我们要调用的方法,则可传递在某种事件发生时调用(即“回调”)。

如:老板(Boss)让工人(Worker)干完活告诉他干的情况如何。

 

public interface Event {
	public String happenedEvent();
} 

public class EventA implement Event {
	public String happenedEvent() {
		System.out.println(“发生了事件A”);
	}
}

public class EventB implements Event {
	public String happenedEvent() {
		System.out.println(“发生了事件B”);
	}
}
public class Worker {
	private String name;
	private Boss boss;
	private Event event;

	public Worker(String name, Event event) {
		this.name = name;
		this.event = event;
	

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setBoss(Boss boss) {
		this.boss = boss;
	}

	public Boss getBoss() {
		return boss;
	}

	public void setEvent(Event event) {
		this.event = event;
	}

	public Event getEvent() {
		return event;
	}

	public void doWork() {
		System.out.println(name + “ is doing the work!”);
		for(int i=0; i<10000; ++i) {
			int x = i;
		}
		System.out.println(name + “ finished the work, please send the message to his boss”);
		boss.getWorkEvent(this, event);
	}
}

public class Boss {
	private String name;

	public Boss(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
}

public void getHappenedEvent(Worker worker, Event event) {
	System.out.println(“老板接收到的信息:” + worker.getName() + “ :” + event.happenedEvent());
}

public class TestCallBack {
	public static void main(String args[]) {
		Boss boss = new Boss(“老板”);
		Worker w1 = new Worker(“张三”);
		Worker w2 = new Worker(“李四”);
		
		Event e1 = new EventA();
		Event e2 = new EventB();

		w1.setEvent(e1);
		w2.setEvent(e2);

		w1.doWork();
		w2.doWork();
	}
}
 

 

分享到:
评论

相关推荐

    Dev-Cpp.6.7.5.MinGW-w64.GCC.10.3.Setup.exe

    Dev-Cpp.6.7.5.MinGW-w64.GCC.10.3.Setup.exe

    Dev-Cpp.5.10.TDM-GCC.4.8.1.Setup.exe

    Dev-Cpp.5.10.TDM-GCC.4.8.1.Setup.exe

    hmcl-dev-3.5.4.234 2.jar

    hmcl-dev-3.5.4.234 2.jar

    Red Panda Dev-C++.lnk

    Red Panda Dev-C++.lnk

    java-1.8.0-openjdk-1.8.0.282-1.b08.dev.redhat.windows.x86_64.zip

    OpenJDK是Java Development Kit (JDK) 的开放源代码实现,由Oracle公司最初发起,但现在由全球多个开源社区共同维护和改进。 Java JDK是开发者编写、调试和运行Java应用程序所需的核心组件。它包含Java虚拟机(JVM...

    Typora-1.2.1-dev.dmg

    Typora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev.dmgTypora-1.2.1-dev....

    dev-ezx-0.2.0.rar_dev-ezx-0.2.0.t_dev-ezx-0.2.0.tg_dev-ezx-0.2.0

    【标题】"dev-ezx-0.2.0.rar_dev-ezx-0.2.0.t_dev-ezx-0.2.0.tg_dev-ezx-0.2.0" 提供的是一款针对 Motorola E680I EZX 平台的开发包,版本为 0.2.0。这个压缩包包含了多个文件格式,如 .rar、.t、.tg 和 .tgz,可能...

    weka-dev-3.7.10.jar

    Java weka包,提供arff文件操作和诸多聚类分类算法等。 其实网上有很多相关的教程,从如何下载weka包,到如何使用,都有很详细的说明,这里上传上来以方便使用。

    java-1.8.0-openjdk-1.8.0.275-1.b01.dev.redhat.windows.x86_64.zip

    Java 1.8.0 OpenJDK 是一个广泛使用的开源Java开发工具包,它为开发者提供了执行和构建Java应用程序所需的所有组件。OpenJDK是Java Development Kit(JDK)的一个实现,由甲骨文公司(Oracle)赞助并维护,但其源...

    gcc-ada-4.8.1-4-mingw32-dev.tar.lzma

    gcc-ada-4.8.1-4-mingw32-dev.tar.lzma MinGW

    Embarcadero Dev-C++.lnk

    Embarcadero Dev-C++.lnk

    Dev Cpp-5.11.rar

    Dev-Cpp.5.11.TDM-GCC.4.9.2.安装程序。 调试工具 Insight工具是一款全功能的图形化用户接口的GNU调试工具,您可以使用这一工具对BCM模块设备的应用进行高效率的调试 丰富的系统软件 嵌入式实时操作系统 ...

    Dev-Cpp.6.6.GCC.10.2.Setup.exe

    Dev-Cpp.6.6.GCC.10.2.Setup.exe

    Dev-Cpp-5.11-TDM-GCC-4.9.2-Setup.exe

    标题中的"Dev-Cpp-5.11-TDM-GCC-4.9.2-Setup.exe"和描述中的"Dev-Cpp_5.11_TDM-GCC_4.9.2_Setup.exe"指向的是同一款软件的安装程序,名为Dev-Cpp,这是一个集成开发环境(IDE),专门用于编写C++语言的程序。...

    libaio-devel-0.3.106(i386 x86_64)

    libaio-devel-0.3.106 是一个针对 i386 和 x86_64 架构的开发包,它在 Oracle 11g Release 2 (11gR2) 的安装过程中起着至关重要的作用。libaio,全称为“Linux Asynchronous Input/Output”,是 Linux 操作系统中的...

    mingwrt-3.15.2-mingw32-dev.tar.gz

    在下载并解压`mingwrt-3.15.2-mingw32-dev.tar.gz`后,你需要将bin目录添加到系统PATH环境变量中,这样就可以在命令行中直接调用编译工具。然后,你可以使用gcc或其他编译器开始编译源代码,同时通过`#include ...

    PyPI 官网下载 | PyFunceble_dev-0.128.0-py3-none-any.whl

    **PyPI 官网下载 | PyFunceble_dev-0.128.0-py3-none-any.whl** PyPI(Python Package Index)是Python社区的官方软件仓库,为Python开发者提供了一个集中发布和下载Python模块的地方。PyFunceble_dev-0.128.0-py3-...

    jna-5.6.0.jar、jna-platform-5.6.0.jar

    在Java编程环境中,有时我们需要与C++库进行交互,实现跨语言通信。为了实现这个目标,Java Native Access(JNA)提供了一种解决方案。标题提到的"jna-5.6.0.jar"和"jna-platform-5.6.0.jar"是JNA框架的关键组成部分...

    Python库 | python-dev-docker-project-0.1.9.dev0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python-dev-docker-project-0.1.9.dev0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    glib-dev-2.12.11.zip

    本文将深入探讨GLib库及其在开发中的应用,以及如何利用glib-dev-2.12.11.zip进行开发工作。 GLib是GTK+图形用户界面库的基础,但它的作用远不止于此。它是一个C语言的库,提供了一系列基础数据类型、线程支持、...

Global site tag (gtag.js) - Google Analytics