`

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

阅读更多

调用方式

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

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

 

 

分享到:
评论

相关推荐

    软件工程知识点

    系统确认验证需要以用户为主体,以需求规格说明书中对软件的定义为依据,由此对软件的各项规格进行逐项地确认,以确保已经完成的软件系统与需求规格的一致性。为了方便用户在系统确认期间能够积极参入,也为了系统在...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    11.4.3 移除项目回调 11.4.4 理解SQL缓存通知 11.4.5 缓存通知的工作方式 11.4.6 启用通知 11.4.7 创建缓存依赖 11.5 自定义缓存依赖 11.5.1 基本的自定义缓存依赖 11.5.2 使用消息队列的自定义缓存...

    asp.net知识库

    .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的...

    ASP.NET4高级程序设计(第4版) 3/3

    11.4.3 移除项目回调 381 11.4.4 理解SQL缓存通知 383 11.4.5 缓存通知的工作方式 384 11.4.6 启用通知 384 11.4.7 创建缓存依赖 385 11.5 自定义缓存依赖 386 11.5.1 基本的自定义缓存依赖 386 ...

    码垛机设计方案.docx

    码垛机设计方案(一) 一:系统方案概述经对贵公司产品、场地的分析,技术需求、指标的详细研究和理解,为了充分满足该技术要求,对本工程我们采用方案附图所示的机器人码垛系统。 一:总体方案 本机器人码垛系统,...

    庖丁解牛纵向切入ASP.NET 3.5控件和组件开发技术.pdf

    1.2 服务器控件在软件开发过程中的作用1 1.3 在控件开发中提升自己2 1.4 可继承控件基类介绍2 1.5 运行一个简单的控件7 1.5.1 开发一个简单控件7 1.5.2 部署和运行11 1.6 控件生命周期12 1.6.1 概述12 1.6.2...

    码垛机设计方案.doc

    码垛机设计方案(一) 一:系统方案概述经对贵公司产品、场地的分析,技术需求、指标的详细研究和理解, 为了充分满足该技术要求,对本工程我们采用方案附图所示的机器人码垛系统。 一:总体方案 本机器人码垛系统,...

    码垛机设计方案(1).doc

    码垛机设计方案(一) 一:系统方案概述经对贵公司产品、场地的分析,技术需求、指标的详细研究和理解, 为了充分满足该技术要求,对本工程我们采用方案附图所示的机器人码垛系统。 一:总体方案 本机器人码垛系统,...

    VC学习大纲 VC学习讲义

    是计算机辅助程序设计软件,Winmain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate...

    antlr4权威指南

    ANTLR生成的语法分析器能够自动建立名为语法分析树(parse tree)的视图,其他程序可以遍历此树,并在所需处理的结构处触发回调函数。在先前的ANTLR 3中,用户需要补充语法来创建树。除了自动建立树结构之外,ANTLR ...

    php网络开发完全手册

    7.5.6 通过回调函数执行正则表达式 7.5.6 的搜索和替换——preg_replace_ 7.5.6 callback 114 7.5.7 用正则表达式进行字符串分割 7.5.7 ——preg_split 115 7.6 字符操作的注意事项 117 7.7 小结 118 第8章 数组操作...

    J2EE中文版指南 CHM格式 带全文检索

    确定应用程序客户端的回调处理机制 232 六.EIS(Enterprise Information System)层安全 232 配置契约 232 容器管理的契约 232 组件管理的契约 233 配置资源适配器安全 233 七.传递安全身份 234 配置组件使用的...

    深入解析Windows操作系统中文.part2.rar

    用户回调 179 文件系统重定向 180 注册表的重定向和反射 180 I/O控制请求 181 16位安装器应用程序 182 打印 182 一些限制 182 3.9 本章总结 182 第4章 管理机制 183 4.1 注册表 183 查看和修改注册表 183 注册表用法...

    新版Android开发教程.rar

    对软件开发者的影响 � 因为 Android 移动软件平台抱持开放互通的观念,势必吸引不少自由软件的拥护者。 � 开发方向有三个重点 :----------------------------------- Android 编程基础 7 � 应用软件的开发 � ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    在面向对象的程序设计中,你可以用软件对象表示现实世界的对象,而这些软件对象和 现实世界对象是相对应的。例如:如果你正在建立一个帐户管理系统,那么你的对象就是帐 户、欠款、信用卡、月收入、贷款、交易等等。...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 ...

Global site tag (gtag.js) - Google Analytics