回调函数的简单实例

回调函数在之前之一听到,但是具体是个啥还真说不出个之所以然来,所以特地写下这篇文章

回调函数它那传呼其神的效果是如何实现的呢?说白了,就是接口的应用,从这里也将看到接口的好处。


情景模拟

有两个用户 追本溯源和王小贱 需要在磁盘中记录本周末的计划,这记录要涉及非常非常庞大的技术,而且将来有更多的用户需要记录,无奈,请了apache组织中的一个神秘高手设计了一个具体实现该功能的方法。可是在设计的过程中问题出现了,这个功能需要针对不同的用户先初始化信息,才能完成整个记录功能。而这位apache高手需要设计的是一个针对各个用户的通用方法,如何解决 初始化用户信息的那一块动态的操作呢? apache高手思考了一下,想出了下面的技术


技术应用:

初始化信息难题解决:采用接口,在service中只用一个规范统一的接口函数代替,具体的实现根据客户端对接口的实现来指定不同的初始化方式。


代码示例:

首先定义一个接口

package callbackTs;

public interface InterfaceTs {
	public void function(String name);
}
然后在将apache写好的类封装在一个类中,可以给各个用户使用:

package callbackTs;

/**
 * 这是apache高手写下的通用类
 * 具体实现非常之复杂的记录功能
 * @author 追本溯源
 *
 */
public class ServiceTs {
	InterfaceTs interfaceTs;
	
	public ServiceTs(InterfaceTs interfaceTs){
		this.interfaceTs = interfaceTs;
	}
	/** 该方法是完成一个功能,给客户端提供**/
	public void execute(String plan){
		System.out.println("欢迎使用计划留言板块,请在下边写下你周末的计划");
		//该计划需要根据调用者不同,动态显示不同计划
		//所以要满足这点,接口是关键,在下边提供一个规范的统一接口函数
		interfaceTs.function(plan);
		System.out.println("哎呀,不错的主意");
		//将计划写入本地磁盘中,省略
		//writerToDisk();
	}
}

最后2位主角上场测试了

追本溯源:

package callbackTs;

public class ClientTs implements InterfaceTs{

	/** 回调函数**/
	public void function(String plan) {
		System.out.println(plan+":我的计划是先上网看个电影--在写点代码--逛逛公园");
	}
	
	/** 将本周末的计划记录**/
	public void writePlan(){
		//要完成该功能,要调用service类中已经封装好的execute方法
		ServiceTs st = new ServiceTs(this);
		String plan = "追本溯源";
		st.execute(plan);
	}
	
	public static void main(String[] args) {
		ClientTs ct = new ClientTs();
		ct.writePlan();
	}

}

结果:

欢迎使用计划留言板块,请在下边写下你周末的计划
追本溯源:我的计划是先上网看个电影--在写点代码--逛逛公园
哎呀,不错的主意

王小贱:

package callbackTs;

public class ClientOtherTs implements InterfaceTs{

	/** 回调函数**/
	public void function(String plan) {
		System.out.println(plan+":我的计划是先打盘游戏--在写点代码--陪陪女友");
	}
	
	/** 将本周末的计划记录**/
	public void writePlan(){
		//要完成该功能,要调用service类中已经封装好的execute方法
		ServiceTs st = new ServiceTs(this);
		String plan = "王小贱";
		st.execute(plan);
	}
	
	public static void main(String[] args) {
		ClientOtherTs cot = new ClientOtherTs();
		cot.writePlan();
	}

}

结果:

欢迎使用计划留言板块,请在下边写下你周末的计划
王小贱:我的计划是先打盘游戏--在写点代码--陪陪女友
哎呀,不错的主意

我看了一下回调函数的解释:A 类 a1 函数调用 B类 execute函数实现功能,execute需要根据A类的具体情况才能完成功能,所以A类实现了一个回调函数callback。execute调用callback函数,但是如何调用呢,这需要将A类对象传入,对方用A实现的接口 进行接收,用接口完成调用callback。

我在想为什么要在A中调用execute呢,如果有一种情况,我需要在另外一个类中调用execute ,而 execute 需要 实现了接口的类对象(A)中的一些方法(如何实现和上面相同)。这里仅仅是将调用的位置改变一下,其他的都不变。

这种写法我将在动态代理中的动态代理简单改写中介绍。


你可能感兴趣的:(回调函数的简单实例)