对软件设计中回调机制的理解

调用方式

       模块之间的通信,总是存在一定的调用。从调用方式上来看,可以分为两种:同步调度、异步调用。

同步调度:即阻塞调用,A调用B,A会等待B执行完,A所在线程会阻塞,属于双向通信

异步调用:当前线程不阻塞,A调用B后继续往下执行。如果A需要B的返回,则B在执行完成后要调用A,这就是回调,属于双向通信。如果A不需要B的返回,属于单向通信

 

 

java的回调机制

      诸如javascript、actionscript等脚本语言,函数可以作为参数来传递,所以通过将函数作为参数,就可以实现回调。如:

//注册鼠标按下时的事件回调

this.addEventListen(MouseEvent.MOUSE_DOWN,onMouseDownHandler);

 

/**

 * 当鼠标按下时的事件处理

 */

function onMouseDownHandler(MouseEvent e)

{

}

 

但java却不能将方法作为一个参数来传递,但是java的参数可以是一个引用,正好java可以通用它来实现回调,下面将通过一个例子来实现。

package com.wxj.callback;

/**
 * 回调接口
 * @author Administrator
 *
 */
public interface ICallback
{

	public void execute(ResponseContext context);
	
}

 

package com.wxj.callback;

/**
 * 回调结果
 * @author Administrator
 *
 */
public class ResponseContext
{

	/**
	 * 状态
	 */
	private int status;
	
	/**
	 * 描述消息
	 */
	private String message;

	public int getStatus()
	{
		return status;
	}

	public void setStatus(int status)
	{
		this.status = status;
	}

	public String getMessage()
	{
		return message;
	}

	public void setMessage(String message)
	{
		this.message = message;
	}
	
}

 

 

package com.wxj.callback;

/**
 * 业务逻辑
 * @author Administrator
 *
 */
public class Business
{
	
	private ICallback callback;
	
	public Business(ICallback callback)
	{
		this.callback = callback;
	}
	
	/**
	 * 执行具体的业务逻辑
	 */
	public void work()
	{
		System.out.println("work");
		ResponseContext context = new ResponseContext();
		
		context.setStatus(1);
		context.setMessage("执行成功");
		//回调
		callback.execute(context);
	}
	
}

 

package com.wxj.callback;

/**
 * 测试类
 * @author Administrator
 *
 */
public class TestCallback
{

	public static void main(String[] args)
	{
		Business biz = new Business(new ICallback()
		{
			
			@Override
			public void execute(ResponseContext context)
			{
				if(context.getStatus() == 1)
				{
					System.out.println("业务执行成功");
				}
			}
		});
		
		biz.work();
	}
	
}

 

 

回调在开源项目中的应用

       回调模式在zookeeper中随机可见,比如连接zookeeper,

ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 500000,new Watcher() 

{

    public void process(WatchedEvent event) 

    {

           //连接成功后做的相关处理

    }

});

Watch是zookeeper的核心

 

小结

       回调是一种常见的设计模式,但23种设计模式中没有叫回调模式的,如果非要归为某一类,它其实就是观察者模式,只不过观察者只一个而已。。。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值