回调函数基本原理

之前开发GUI的时候也使用了很多的事件监听器,不过当时都是不求甚解没有深入的探索其中的原理。最近在使用阿里云的应用配置管理(ACM)平台,通过JavaSDK调用。在封装ACM本地工具包时突然对回调函数产生了兴趣,故在本文总结回调函数的基本原理,如有差错还望指点。

首先我们创建监听器接口

package com.eiffel.callback;

/**
 * 监听器接口
 * 
 * @author eiffel
 *
 */
public interface ConfigChangeListener {

	/**
	 * 回调方法
	 * 
	 * @param configInfo
	 */
	public void receiveConfigInfo(String configInfo);

}

创建自定义的监听借口实现类

package com.eiffel.callback;

/**
 * 监听器实现类
 * 
 * @author eiffel
 *
 */
public class MyConfigListener implements ConfigChangeListener {

	public void receiveConfigInfo(String configInfo) {
		System.out.println("监听器接收到信号...");
		System.out.println("接收到configInfo变更通知,configInfo变更后的内容是:" + configInfo);

	}
}

创建监听器和configInfo管理类,该类中包含两个成员configChangeListener和configInfo。通过setConfigInfo变更信息,然后执行exexute()方法触发回调函数。

package com.eiffel.callback;

import java.util.ArrayList;
import java.util.List;

/**
 * 监听器和configInfo管理类
 * 
 * @author eiffel
 *
 */
public class ConfigService {

	// 监听器
	private ConfigChangeListener configChangeListener = null;
	// 被监听的信息,当信息发生变更后需要通知所有监听对象
	private String configInfo;

	public void setConfigInfo(String configInfo) {
		this.configInfo = configInfo;
		// configInfo内容变更,通知所有监听器更新configInfo
		execute();
	}

	/**
	 * 注册监听器
	 * 
	 * @param configChangeListener
	 */
	public void addListener(ConfigChangeListener configChangeListener) {
		this.configChangeListener = configChangeListener;
	}

	/**
	 * 通知监听器更新configInfo
	 */
	public void execute() {

		if (configChangeListener != null) {
			configChangeListener.receiveConfigInfo(configInfo);
		}
	}

}

接下来是测试

package com.eiffel.callback;

/**
 * 测试类
 * 
 * @author eiffel
 *
 */
public class MyTest {

	public static void main(String[] args) {

		/**
		 * 添加监听
		 */
		ConfigService service = new ConfigService();
		service.addListener(new MyConfigListener());

		/**
		 * 通过set方法变更configInfo
		 */
		service.setConfigInfo("hello,eiffel~");
	}

}

测试结果:

在学习过程中发现回调函数和观察者模式大同小异,可以将监听器理解为观察者,configInfo理解成被观察对象.ConfigService来统筹大局,管理观察者和被观察对象。当被观察对象发生修改动作时(我们这里是setConfigInfo),则通知观察者他们的观察对象发生了修改,这里通知时调用的方法就是观察者(监听器)实现的回调方法。

查阅其他博文总结二者的差异:观察者模式里面目标类维护了所有观察者的引用,而回调里面只是维护了一个引用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值