`
freewxy
  • 浏览: 342659 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java回调机制实现

 
阅读更多

 

    Java的接口支持提供了一种获得回调的等价功能的机制。其技巧是:定义一个简单的接口,并在该接口中声明我们要调用的方法。其特点是:一个实例持有一个接口的引用

例如,假设我们希望在某个时间发生时得到通知。我们可以定义一个接口:

package com.wxy.callback;

public interface InterestingEvent {

    /**

     *这是一个常规方法,如果需要,可以有返回值,也可以接受参数

     */

    public void interestingEvent();

}

 

  这使得我们可以控制实现该接口的类得任何对象。因此,我们不必关心任何外部类型信息。发出事件信号的类必须等待实现了InterestingEvent接口的对象,并在适当时候调用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();

        }

    } 

}

 

EventNotifier中,使用somethingHappend谓词来跟踪是否哦应触发事件。在许多情况下,调用此方法足以保证向interesthingEvent()发出信号。

希望接受事件通知的代码必须实现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!

 可以看到,当员工完成工作时(即触发某事件时),staff对象调用boss对象的方法,实现回调功能。设计模式中,观察者模式也是一个典型的应用回调机制的例子。

 

 

 

1
5
分享到:
评论
4 楼 kisssssss 2011-08-08  
   。。。。
3 楼 kisssssss 2011-08-08  
2 楼 kisssssss 2011-08-08  
1 楼 kisssssss 2011-08-08  
getStaffEvent(this, event);  
    }   

相关推荐

    java 回调函数 实现

    在回调机制中,接口扮演着关键角色,因为它定义了被调用的回调方法。例如,`OnButtonClickListener`接口可能包含了当按钮被点击时需要执行的方法。 2. **回调函数的实现**:在描述中提到,回调函数是通过自己模拟...

    Java回调机制

    Java回调机制是软件设计模式中的一种,特别是在Java和Android开发中广泛应用。回调允许服务端对象在执行特定操作后,通知并调用客户端对象的方法。这种机制使得程序可以在异步环境中运行,即服务端处理完一个任务后...

    给初学者的java回调demo

    Java回调是一种设计模式,它是当一个对象调用另一个对象的方法时,被调用对象通过某种方式在完成操作后反过来调用调用者的方法,这种机制就是回调。在Java中,回调通常通过接口或者抽象类来实现。这篇"给初学者的...

    java回调机制1

    Java回调机制是一种编程模式,它允许一个对象在特定事件发生时调用另一个对象的方法。在上述例子中,回调机制的概念逐渐展开,通过一个简单的幼儿园加法故事进行解释。 首先,我们有`Student`类,它有一个`fill...

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

    ### Java基础核心理解+什么是回调及回调机制讲解 #### 一、回调机制的引入与应用场景 在软件开发中,特别是面向对象编程语言如Java中,模块间的交互是至关重要的。根据调用方式的不同,可以将模块间的交互分为三种...

    浅谈JAVA回调机制1

    总之,Java回调机制是提高代码灵活性和可扩展性的重要工具,通过将行为传递给其他对象,我们可以实现更复杂的控制流和异步操作,同时保持代码的清晰和模块化。在实际开发中,合理运用回调可以大大提高代码的可维护性...

    java回调函数

    Java回调函数是编程中一种非常重要的设计模式,它允许一个对象在另一个对象完成特定操作后进行通知或执行相应的处理。这种机制使得代码更加灵活,解耦了调用者和被调用者的依赖关系,通常用于事件处理、异步编程、...

    Java利用接口实现回调

    在Java支持方法指针之前,Java接口不能提供一种实现回调的好方法。如果您习惯于传递在事件驱动编程模型中调用的函数指针,则您会喜欢本技巧。  熟悉MS-Windows和X Window System事件驱动编程模型的开发人员,习惯...

    Java回调.rar

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

    如何用Java回调和线程实现异步调用.pdf

    Java回调机制是一种实现异步调用的方式,通过在主程序中注册回调函数,实现主程序和耗时任务的解耦。Java回调机制可以分为两种:同步回调和异步回调。同步回调是在主程序中注册回调函数,等待耗时任务的完成后执行回...

    android中的回调机制

    回调机制的实现需要两个类和一个接口,步骤如下: 1. 首先定义一个接口,也就是回调接口 CallBack,内部包含回调方法; 2. 定义一个类 A,可称为客户端,在该类中提供接口的回调方法,并注册到类 B 服务端;把方法...

    Java/Android回调机制小示例

    总的来说,回调机制是Java和Android编程中的重要工具,它使得程序能够在特定条件满足时执行预定的操作,从而实现异步编程、事件处理等多种功能。理解和熟练运用回调能够提升代码的可读性和可维护性,是每个开发者...

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

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

    java自定义回调函数

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

    微信企业号回调模式实例(Java版)

    本实例将聚焦于Java版本的实现,通过深入理解回调模式,我们可以更好地构建稳定、高效的微信企业号应用。 首先,我们要明白微信企业号回调的基本原理。当微信企业号接收到特定事件(如用户关注、取消关注、消息发送...

    Java中回调方法使用范例

    1. **回调接口**:在Java中,回调机制通常通过定义一个接口来实现。这个接口会包含一个或多个待回调的方法。例如,我们可以定义一个名为`Callback`的接口,其中有一个`execute()`方法: ```java public interface ...

    详解Java的回调机制

    总之,Java的回调机制是实现对象间通信和异步处理的重要工具,它提供了灵活的编程模型,使得开发者能够更好地设计和实现复杂系统。了解和掌握回调机制,对于提升Java编程能力具有重要意义。在实际开发中,根据具体...

    Java异步回调机制实例解析共5页.pdf.zip

    Java异步回调机制是Java编程中一种常见的处理方式,它主要用于提高程序的执行效率和响应速度,尤其是在处理I/O密集型任务或者网络通信时。在Java中,异步回调允许程序在执行耗时操作时,不阻塞主线程,而是立即返回...

    C++JNI多线程回调java

    在多线程环境中,每个线程都有自己的执行上下文,这意味着当C++线程回调Java方法时,必须确保Java的同步机制正确地应用,以避免数据竞争和其他并发问题。Java中的`synchronized`关键字和`java.util.concurrent`包下...

Global site tag (gtag.js) - Google Analytics