- 浏览: 342658 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
alafqq:
很好的一篇启蒙hashmap的文章;HASHTABLE的93行 ...
使用数组和链表实现hash表存储信息 -
小帅1127:
我擦,我还以为有什么大坑呢,这也写出来。。。
if..else if和if..if的区别 -
fncj:
转下http://www.dodoer.com
hadoop单机版搭建图文详解 -
yueshang520:
Spring注解原理的详细剖析与实现 -
fncj:
转下,谢谢http://www.whohelpme.com/b ...
Spring注解原理的详细剖析与实现
Java的接口支持提供了一种获得回调的等价功能的机制。其技巧是:定义一个简单的接口,并在该接口中声明我们要调用的方法。其特点是:一个实例持有一个接口的引用 例如,假设我们希望在某个时间发生时得到通知。我们可以定义一个接口:
这使得我们可以控制实现该接口的类得任何对象。因此,我们不必关心任何外部类型信息。发出事件信号的类必须等待实现了InterestingEvent接口的对象,并在适当时候调用interestingEvent()方法。
在EventNotifier中,使用somethingHappend谓词来跟踪是否哦应触发事件。在许多情况下,调用此方法足以保证向interesthingEvent()发出信号。 希望接受事件通知的代码必须实现Interestingevent接口,并将自身引用传递给事件通知程序。
下面是一个典型的回调案例:公司员工工作,工作完成后主管要求员工汇报工作完成情况。 事件接口:
事件具体实现类: 主管类: 员工类: 测试类: 测试结果: 可以看到,当员工完成工作时(即触发某事件时),staff对象调用boss对象的方法,实现回调功能。设计模式中,观察者模式也是一个典型的应用回调机制的例子。 package com.wxy.callback;
public interface InterestingEvent {
/**
*这是一个常规方法,如果需要,可以有返回值,也可以接受参数
*/
public void interestingEvent();
}
package com.wxy.callback;
public class EventNotifier {
/**事件对象*/
private InterestingEvent ie;
/**事件发生状态*/
private boolean somethingHappend;
/**
* 构造函数,传入事件对象以备后用
* @param event 事件对象
*/
public EventNotifier(InterestingEvent event) {
this.ie = event;
//事件未发生状态
somethingHappend = false;
}
/**
* 事件发生,调用InterestingEvent事件发生对象的方法发出事件信号
*/
public void doWork() {
//检查在别处设置的谓词
if (somethingHappend) {
//通过调用接口的这个方法发出事件信号
ie.interestingEvent();
}
}
}
public class CallMe implements InterestingEvent {
private EventNotifier en;
/**
* 创建事件通知程序,并将自身引用传递给它
*/
public CallMe() {
this.en = new EventNotifier(this);
}
/**
* 为事件定义实际的处理程序
*/
@Override
public void interestingEvent() {
System.out.println("oh,something interesting has happended!");
System.out.println("do some action!");
}
public EventNotifier getEn() {
return en;
}
public void setEn(EventNotifier en) {
this.en = en;
}
}
package com.wxy.callback;
public interface Event {
/**
* 返回发生事件信息
* @return 事件信息
*/
public String happendEvent();
}
package com.wxy.callback;
public class EventA implements Event {
@Override
public String happendEvent() {
return "job has been finished!";
}
}
package com.wxy.callback;
public class EventB implements Event {
@Override
public String happendEvent() {
return "job has been finished!";
}
}
package com.wxy.callback;
public class Boss {
private String name;
public Boss(String name) {
this.name = name;
}
public void getStaffEvent(Staff staff, Event event) {
System.out.println("the msg what the boss received is--" + staff.getName() + ":"
+ event.happendEvent());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.wxy.callback;
public class Staff {
private Event event; //事件
private String name; //员工姓名
private Boss boss; //员工所属主管
/**
* 员工构造器
* @param name 员工姓名
* @param boss 传入Boss对象,便于回调反馈工作状况
*/
public Staff(String name, Boss boss) {
this.name = name;
this.boss = boss;
}
public void doWork() {
System.out.println(name + " is doing working...");
//do somtething.....
for (int i = 0; i < 10; i++) {
System.out.println("sheep" + i);
}
System.out.println(name + " was finished work!");
//tell the boss what has happend,这里就是boss的回调方法
boss.getStaffEvent(this, event);
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boss getBoss() {
return boss;
}
public void setBoss(Boss boss) {
this.boss = boss;
}
}
package com.wxy.callback;
public class StaffBossTest {
public static void main(String args[]) {
//初始化员工和主管
Boss boss = new Boss("boss");
Staff staffA = new Staff("staffA", boss);
Staff staffB = new Staff("staffB", boss);
//主管发放了两个新任务
Event event1 = new EventA();
Event event2 = new EventB();
//员工接受任务开始干活
staffA.setEvent(event1);
staffB.setEvent(event2);
//员工干晚活,及时向主管反馈工作情况
staffA.doWork();
staffB.doWork();
}
}
staffA was finished work!
the msg what the boss received is--staffA:job has been finished!
staffB is doing working...
sheep0
sheep1
sheep2
sheep3
sheep4
sheep5
sheep6
sheep7
sheep8
sheep9
staffB was finished work!
the msg what the boss received is--staffB:job has been finished!
评论



}

发表评论
-
apache日志信息详解
2011-11-06 21:19 6317一、访问日志的格式 Apache内建了记录服务器 ... -
使用CGLIB实现AOP功能与AOP概念解释 .
2011-08-19 10:30 1423第三方创建代理对象的框架cglib,目标类可以不实现接口 ... -
浏览器如何工作
2011-08-19 08:57 0http://taligarsiel.com/Projects ... -
编码实现用JDK中的Proxy实现springAOP功能
2011-08-18 15:04 791http://blog.csdn.net/iamtheevil ... -
Spring注解原理的详细剖析与实现
2011-08-14 23:09 84349本文主要分为三部分: ... -
Spring装配基本属性的原理分析与代码实现
2011-08-11 15:37 1479首先,做一个配置属性的基本测试。修改beans.xml,使引用 ... -
编码剖析Spring依赖注入的原理
2011-08-10 20:01 1866一、注入依赖对象 基本类型对象注入: <b ... -
Spring的三种实例化Bean的方法
2011-08-10 14:03 1Spring的三种实例化Bean的方法 1、 使用 ... -
Spring管理bean的原理自定义实现
2011-08-10 10:44 62431、Spring通过BeanDefinition管理基于S ... -
spring环境搭建与测试
2011-08-10 08:40 3470Chapter1、搭建与测试spring的环境 1、 ... -
log4j的使用与详细分析
2011-08-05 13:32 2690一、什么是log4j? http://logging.a ... -
log4j使用详解
2011-08-04 23:05 2http://logging.apache.org/log4j ... -
spring入门及Demo
2011-07-29 16:01 0一、Spring是什么? Spring是一个开源框架,它 ... -
山寨Hibernate
2011-04-09 23:32 0---------------------------- ... -
观察者模式
2011-04-09 00:35 1163基本简介: 观察者模式(也称为发布/订阅模式:Publi ... -
Abstract Factory
2011-04-07 22:46 1146ABSTRACT FACTORY(抽象工厂) --对象创建型模 ... -
MVC模式分析与实现
2011-04-02 00:11 35061、 什么是模式? 模式描述了一个出现在特定设计环境中 ... -
java解析XML的四种方法的学习与比较
2011-03-30 20:55 7293四种XML解析方法: ... -
自定义日志模块实现
2011-03-30 09:58 1167package wxy.XXXX.Utils; impo ... -
synchronized(this)
2011-03-29 09:17 70551、当两个并发线程访问同一个对象object中的这个synch ...
相关推荐
在回调机制中,接口扮演着关键角色,因为它定义了被调用的回调方法。例如,`OnButtonClickListener`接口可能包含了当按钮被点击时需要执行的方法。 2. **回调函数的实现**:在描述中提到,回调函数是通过自己模拟...
Java回调机制是软件设计模式中的一种,特别是在Java和Android开发中广泛应用。回调允许服务端对象在执行特定操作后,通知并调用客户端对象的方法。这种机制使得程序可以在异步环境中运行,即服务端处理完一个任务后...
Java回调是一种设计模式,它是当一个对象调用另一个对象的方法时,被调用对象通过某种方式在完成操作后反过来调用调用者的方法,这种机制就是回调。在Java中,回调通常通过接口或者抽象类来实现。这篇"给初学者的...
Java回调机制是一种编程模式,它允许一个对象在特定事件发生时调用另一个对象的方法。在上述例子中,回调机制的概念逐渐展开,通过一个简单的幼儿园加法故事进行解释。 首先,我们有`Student`类,它有一个`fill...
### Java基础核心理解+什么是回调及回调机制讲解 #### 一、回调机制的引入与应用场景 在软件开发中,特别是面向对象编程语言如Java中,模块间的交互是至关重要的。根据调用方式的不同,可以将模块间的交互分为三种...
总之,Java回调机制是提高代码灵活性和可扩展性的重要工具,通过将行为传递给其他对象,我们可以实现更复杂的控制流和异步操作,同时保持代码的清晰和模块化。在实际开发中,合理运用回调可以大大提高代码的可维护性...
Java回调函数是编程中一种非常重要的设计模式,它允许一个对象在另一个对象完成特定操作后进行通知或执行相应的处理。这种机制使得代码更加灵活,解耦了调用者和被调用者的依赖关系,通常用于事件处理、异步编程、...
在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。 熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...
理解并熟练运用回调机制,能够帮助开发者编写出更加灵活、可维护的代码。在实际开发中,合理地利用回调能够提高程序的性能和用户体验,同时也有助于遵循面向对象设计原则,实现模块间的良好协作。
Java回调机制是一种实现异步调用的方式,通过在主程序中注册回调函数,实现主程序和耗时任务的解耦。Java回调机制可以分为两种:同步回调和异步回调。同步回调是在主程序中注册回调函数,等待耗时任务的完成后执行回...
回调机制的实现需要两个类和一个接口,步骤如下: 1. 首先定义一个接口,也就是回调接口 CallBack,内部包含回调方法; 2. 定义一个类 A,可称为客户端,在该类中提供接口的回调方法,并注册到类 B 服务端;把方法...
总的来说,回调机制是Java和Android编程中的重要工具,它使得程序能够在特定条件满足时执行预定的操作,从而实现异步编程、事件处理等多种功能。理解和熟练运用回调能够提升代码的可读性和可维护性,是每个开发者...
首先,让我们深入理解回调机制。回调是一种允许一个对象在完成特定操作后通知另一个对象的技术。在Java中,这通常通过接口实现。假设我们有一个简单的事件处理系统,其中有一个`EventListener`接口,它有一个`...
在Java中,我们可以使用接口或者匿名内部类来实现回调机制。 首先,我们需要理解什么是回调。回调是一种编程技术,当一个函数执行完毕后,它会调用另一个预先指定的函数,这个被调用的函数就是回调函数。在Java中,...
本实例将聚焦于Java版本的实现,通过深入理解回调模式,我们可以更好地构建稳定、高效的微信企业号应用。 首先,我们要明白微信企业号回调的基本原理。当微信企业号接收到特定事件(如用户关注、取消关注、消息发送...
1. **回调接口**:在Java中,回调机制通常通过定义一个接口来实现。这个接口会包含一个或多个待回调的方法。例如,我们可以定义一个名为`Callback`的接口,其中有一个`execute()`方法: ```java public interface ...
总之,Java的回调机制是实现对象间通信和异步处理的重要工具,它提供了灵活的编程模型,使得开发者能够更好地设计和实现复杂系统。了解和掌握回调机制,对于提升Java编程能力具有重要意义。在实际开发中,根据具体...
Java异步回调机制是Java编程中一种常见的处理方式,它主要用于提高程序的执行效率和响应速度,尤其是在处理I/O密集型任务或者网络通信时。在Java中,异步回调允许程序在执行耗时操作时,不阻塞主线程,而是立即返回...
在多线程环境中,每个线程都有自己的执行上下文,这意味着当C++线程回调Java方法时,必须确保Java的同步机制正确地应用,以避免数据竞争和其他并发问题。Java中的`synchronized`关键字和`java.util.concurrent`包下...