`

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

阅读更多

调用方式

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

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

 

 

分享到:
评论

相关推荐

    Java基础核心理解+什么是回调即回调机制讲解

    ### Java基础核心理解+什么是回调及回调机制讲解 #### 一、回调机制的引入与应用场景 在软件开发中,特别是面向对象编程语言如Java中...在实际开发中,正确理解和运用回调机制对于编写高质量的Java应用程序至关重要。

    回调函数与回调机制.docx

    回调函数和回调机制是软件开发中常用的设计模式,主要用于实现异步操作、事件处理和定制化工作流程。回调函数是一个用户定义的函数,它作为参数传递给另一个函数,由该函数在适当的时间调用。这种设计允许将某些特定...

    使用一个小例子解释Java回调/代理机制的项目压缩包

    首先,让我们深入理解回调机制。回调是一种允许一个对象在完成特定操作后通知另一个对象的技术。在Java中,这通常通过接口实现。假设我们有一个简单的事件处理系统,其中有一个`EventListener`接口,它有一个`...

    回调 回调 1

    回调是软件设计中的一种通信机制,它允许一个函数或方法在执行过程中调用另一个预先设定的函数或方法,以响应特定事件或完成特定任务。...理解和熟练掌握回调机制对于编写高效、灵活的软件至关重要。

    回调机制及其在Android应用开发中的应用.pdf

    回调机制是软件设计中的一种通信方式,它允许被调用的方法或函数在执行完特定操作后,反过来调用调用者提供的另一个方法。这种双向调用模式在处理异步操作或者需要在特定事件发生时进行响应的场景中非常常见。在回调...

    易语言类回调新

    "类回调新"是易语言中一个重要的概念,它涉及到面向对象编程中的类和回调机制。在这个场景下,"类回调新"可能是指一种更新的或者优化的类回调实现方式。 在易语言中,类是对象的模板,定义了一组属性(数据成员)和...

    C语言中的回调函数

    综上所述,回调函数是C语言中一个重要的编程概念,它的理解和应用对于提高软件的灵活性和模块化有重大意义。通过本课程的学习,学员将能够熟练掌握回调函数的使用方法,合理避免使用中的常见陷阱,并能够根据需要在...

    给初学者的java回调demo

    总之,Java回调是软件设计中一个强大的工具,尤其在处理异步操作和事件驱动编程时。通过实践这个demo,你将能够更好地掌握这一关键概念,并将其应用到自己的项目中。记得不断地练习和探索,理论结合实践,你的Java...

    详解Java的回调机制

    Java的回调机制是一种设计模式,它允许一个对象在完成特定操作后通知另一个对象。这种机制在软件开发中常用于处理事件、异步编程以及对象间的通信。回调的主要优点是提高了代码的灵活性和可扩展性。 1. **回调的...

    Delphi 回调函数范例

    在Delphi中,我们可以使用函数指针来实现回调机制。函数指针是一个变量,它存储了一个函数的地址,这样我们就可以通过这个指针来调用该函数,就像使用普通变量一样。 在Delphi中,创建和使用函数指针的步骤如下: ...

    两个经典例子让你彻底理解java回调机制(csdn)————程序.pdf

    这种机制在软件设计中非常常见,特别是在处理异步操作和事件驱动编程中。通过回调,一个对象(调用者)可以注册一个回调函数或接口,以便在某个条件满足或者另一个对象(被调用者)完成其任务后,调用者能够得到通知...

    易语言汇编实现子程序回调应用源码

    在编程中,回调是一种设计模式,允许将一个函数或方法作为参数传递给另一个函数,然后在特定时间被调用。这种机制使得代码具有更好的灵活性和可扩展性。在易语言中,回调通常用于事件驱动编程,比如窗口消息处理、...

    java自定义回调函数

    在Java中,我们可以使用接口或者匿名内部类来实现回调机制。 首先,我们需要理解什么是回调。回调是一种编程技术,当一个函数执行完毕后,它会调用另一个预先指定的函数,这个被调用的函数就是回调函数。在Java中,...

    易语言汇编实现子程序回调应用

    结合压缩包中的"易语言汇编实现子程序回调应用源码"文件,可以深入学习如何在易语言中嵌入汇编代码,理解回调机制的实现,以及如何处理不同类型的参数。分析和研究这些源码,有助于提升对易语言底层机制的理解,增强...

    回调函数讲解

    ### 回调函数详解 #### 一、回调函数的基本概念 在计算机编程中,回调函数是一种特殊的函数,它被作为参数...通过理解和掌握回调函数的工作原理及其应用场景,开发者可以更高效地解决问题并构建出高质量的软件产品。

    VC++ DLL 实现回调函数的实例

    回调函数则是编程中一种常见的设计模式,它允许函数将控制权返回给调用者,使得调用者可以在适当的时候执行特定的处理逻辑。在VC++中,将回调函数实现在DLL中,可以提供更加灵活的跨模块通信方式。 首先,我们需要...

    CallBack_DEMO 回调

    在描述中提到的链接(由于无法直接访问,以下内容基于对回调机制的一般理解进行解释)可能会展示一个具体的回调函数示例。通常,它可能包含以下几个部分: 1. 定义回调接口或回调函数:首先,我们需要一个接口(如...

    Java回调.rar

    理解并熟练运用回调机制,能够帮助开发者编写出更加灵活、可维护的代码。在实际开发中,合理地利用回调能够提高程序的性能和用户体验,同时也有助于遵循面向对象设计原则,实现模块间的良好协作。

    C#实现C++dll回调函数.rar

    在C#与C++的交互中,回调机制是通过指针或委托实现的。C++使用函数指针,而C#使用委托,两者需要在互操作层面上进行转换。 1. **C++ DLL的创建:** 在C++中,我们需要定义一个回调函数的原型,然后声明一个函数...

    ActiveX多线程回调源码+注册脚本+测试页面

    学习源码可以帮助理解如何在多线程环境下设计和实现回调机制,以及如何与JavaScript进行交互。 - **注册脚本**:在Windows中,ActiveX控件需要注册才能在系统中使用。注册脚本通常使用regsvr32.exe工具或自定义的...

Global site tag (gtag.js) - Google Analytics