回调函数的学习

在分析ibatis源码解析配置文件时,接触了大量的回调方法,这里写下学习心得。

一般来说,我们都需要定义一个回调接口,该接口的实现由具体的调用者实现,而模版方法里面规范了一个调用的模版。

如下:

回调接口的定义:

 

/**
 * 回调的接口
 * @author shuidexiongdi
 *
 */
interface ICallBack {
	void doCallBack();
}

 

 模版方法的定义:

 

/**
 * 模版类,该类负责回调函数的调用或者不调用
 * @author shuidexiongdi
 *
 */
class SomeTemplate {
	void afterService(ICallBack callBack) {
		doSomething();
		callBack.doCallBack();
		afterDoCallBack();
	}
	
	void doSomething() {
		System.out.println("haha, i do something first");
	}
	
	void afterDoCallBack() {
		System.out.println("after doing call back");
	}
}
 

 

具体的调用者:

 

/**
 * 具体的调用者,该类定义回调的内容(具体回调的内容由该类实现)
 * @author dengjianquan-ghq
 *
 */
class SomeService {
	void serviceOne() {
		doMyservice();
		SomeTemplate wdbs = new SomeTemplate();
		wdbs.afterService(new ICallBack() {

			public void doCallBack() {
				System.out.println("yes ,doing call back");
				
			}
			
		});
		
	}
	
	void doMyservice() {
		System.out.println("do my service");
	}
}

 

 测试类:

 

//测试用的类
public class CallBackTest {
	
	public static void main(String[] args) {
		new SomeService().serviceOne();
	}

}
 

 

打印的结果:

 

do my service
haha, i do something first
yes ,doing call back
after doing call back

 

 

 总结一下回调和模版模式的相同点和不同点:

相同点:两者都是定义一个模版,调用者只需要实现指定的接口即可

不同点:回调不要求调用者继承模版类,回调的接口通过参数的方式传入;而模版模式一般都要求调用者实现模板类,回调的接口通过继承的方式获得。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值