欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 15:04:28
...

调用方式

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

同步调度:即阻塞调用,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种设计模式中没有叫回调模式的,如果非要归为某一类,它其实就是观察者模式,只不过观察者只一个而已。。。

 

 

相关标签: 设计模式 回调