回调 @

refer:http://www.cnblogs.com/leon19870907/archive/2011/04/21/2024077.html

 

回调方法是把功能定义和功能实现分离的一种手段,是一种松耦合的设计思想。

Java中没有指针,不能传递方法的地址,一般采用接口回调实现把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。

实现回调的原理简介如下

首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法

可以举个现实生活中的例子:

一读者想借《软件技术学习与实践》这本书,但这本书已被其他读者借走了。于是,读者与图书馆管理员间发生了以下对话:

读者:“我把我的电话号码告诉你,等书一到就马上通知我。”

管理员:“好的。另一读者把书还回来后,马上给您打电话,书我先帮您留着。”

在上述这个场景中,读者就是“回调对象”,管理员就是“控制器对象”,读者的电话号码就是“回调对象的方法”

 

 

回调方法的接口:

public interface ICallback
{
	public void test();
}

 

回调方法的实现类(监听类):

public class CallbackImpl implements ICallback
{
	@Override
	public void test()
	{
		//do something...
		System.out.println("excute test");
	}
}


回调方法的调用类

public class Caller
{
	private ICallback c;

	public void setCallback(ICallback callback)
	{
		c = callback;
		call();
	}
	
	public void call()
	{
		c.test();
	}
}

 这里的call()也可在业务类中用Caller的对象来调用。

业务处理类:

public class Main
{
	public static void main(String[] args)
	{
		Caller caller = new Caller();
		caller.setCallback(new CallbackImpl());
	}
}

 setCallback()方法回调了CallbackImpl中的test()方法。

也可不写实现类,而把方法的实现放在业务类中,用匿名类来实现相应的方法:

public class Main
{
	public static void main(String[] args)
	{
		Caller caller = new Caller();
		caller.setCallback(new ICallback()
		{
			@Override
			public void test()
			{
				System.out.println("excute test");
			}
		});
	}
}



 

熟悉Android中Button点击事件处理的同学应该都知道跟上面是一样的。
ICallBack------->OnClickListener接口
CallBackListener--------->实现OnClickListener接口的类
Caller-------->Button对象
Main-------->业务处理类(Activity)

 

相关Blog:

http://hi.baidu.com/%C9%B1%D6%ED%B5%B6%C6%B4%B5%B6/blog/item/aea1b34ffd7e64e5d72afc8f.html

http://blog.youkuaiyun.com/zuolongsnail/article/details/6598226

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值