`

(转)Java回调实现

    博客分类:
  • java
 
阅读更多
Java回调实现

轮询:过10分钟就到女朋友宿舍前面去看她有没有回来。没回来我就再去打游戏。
监听:我搬个凳子坐到她宿舍前,直到她回来。
回调:在她门口贴个条子:回来后请打电话至:011-1231313

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

有个这样的问题:老板(Boss)让工人(Worker)干完活告诉他干的情况如何。

实际上是一个典型的回调问题,Java实现如下:

/** 
* 事件接口 
*/ 
public interface Event { 
    /** 
     * 返回发生事件信息 
     * 
     * @return 事件信息 
     */ 
    public String happendEvent(); 
}


/** 
* 事件A 
*/ 
public class EventA implements Event { 
    /** 
     * 返回发生事件信息 
     * 
     * @return 事件信息 
     */ 
    public String happendEvent() { 
        return "发生了事件 EventA!"; 
    } 
}


/** 
* 事件B 
*/ 
public class EventB implements Event{ 
    /** 
     * 返回发生事件信息 
     * @return 事件信息 
     */ 
    public String happendEvent() { 
        return "发生了事件 EventB!"; 
    } 
}


/** 
* 工人 
*/ 
public class Worker { 
    private Event event;    //事件 
    private String name;    //工人姓名 
    private Boss boss;      //工人所属的老板 
    //传入Boss对象,便于回调反馈工作状况
    public Worker(String name, Boss boss) { 
        this.name = name; 
        this.boss = boss; 
    } 

    /** 
     * 干活 
     */ 
    public void doWork() { 
        System.out.println(name + " is doing working..."); 
        //工人挺辛苦,干着枯燥乏味的重复工作,哈哈 
        for (int i = 0; i < 2000000; i++) { 
            int x = i / 234 + 234; 
        } 
        System.out.println(name + " was finished work."); 
        //向老板说明发生的情况 
        //tell the boss what has happend,这里就是boss的回调方法 
        boss.getWorkerEvent(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 class Boss { 
    private String name; 

    public Boss(String name) { 
        this.name = name; 
    } 

    /** 
     * 老板接收工人的事件 
     * @param worker 工人 
     * @param event  事件 
     */ 
    public void getWorkerEvent(Worker worker, Event event) { 
        System.out.println("老板接收到事件信息: "+worker.getName() + ": " + event.happendEvent()); 
    } 
}
 

/** 
* 测试类 
*/ 
public class Test { 
    public static void main(String args[]){ 
        //初始化老板和工人 
        Boss boss = new Boss("老板"); 
        Worker worker1= new Worker("张三",boss); 
        Worker worker2= new Worker("李四",boss); 

        //捏造两个事件 
        Event event1 = new EventA(); 
        Event event2 = new EventB(); 

        //事件是工人发出的 
        worker1.setEvent(event1); 
        worker2.setEvent(event2); 

        //工人干活,干完了通知老板干的情况如何 
        worker1.doWork(); 
        worker2.doWork(); 

    } 
}


运行结果:
张三 is doing working... 
张三 was finished work. 
老板接收到事件信息: 张三: 发生了事件 EventA! 
李四 is doing working... 
李四 was finished work. 
老板接收到事件信息: 李四: 发生了事件 EventB! 

Process finished with exit code 0 


工人干活完成后,自动将发生的事件汇报给老板。
当然,如果工人很多,每个人都汇报的话,老板肯定会烦,那么老板可能会下达,发生了严重问题的员工才需要汇报问题。这个时候,需要做个事件过滤。

其实观察者模式就是回调的一个实现。
转至于:http://lavasoft.blog.51cto.com/62575/90453
分享到:
评论

相关推荐

    java 回调函数 实现

    在Java编程中,回调函数是一种设计模式,它允许一个对象在另一个对象...在给定的示例中,`Button.java`和`OnButtonClickListener.java`展示了如何通过接口来实现回调,而`CallMeTest.java`则可能是测试回调功能的代码。

    给初学者的java回调demo

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

    java实现企业微信回调配置案例

    3. **Java回调处理类** 创建一个Java类,用于处理来自企业微信的回调请求。这个类通常需要实现HTTP服务端点,例如使用Spring Boot的`@RestController`注解。在接收到POST请求后,解析请求体,通常是JSON格式的数据...

    Java面试如何用Java实现一个回调函数

    Java面试如何用Java实现一个回调函数

    Java利用接口实现回调

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

    java回调函数

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

    java中回调函数的简单实现

    标题"java中回调函数的简单实现"主要探讨的是如何在Java中应用回调函数的概念,以便让程序更加灵活和可扩展。下面我们将深入探讨回调函数的基本原理、应用场景以及如何在Java中实现回调。 首先,回调函数的主要优点...

    Java回调.rar

    Java回调是一种设计模式,它允许一个对象在另一个对象完成特定操作后进行通知或执行相应的代码。这个概念在软件工程中非常常见,特别是在事件驱动编程和异步编程中。回调是通过将一个方法的引用(或者在Java中,一个...

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

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

    java自定义回调函数

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

    Java中回调方法使用范例

    在Java编程中,回调方法是一种设计模式,它允许我们在代码执行过程中插入自定义的行为,特别是在异步编程或者事件处理中非常常见。...进一步研究这些文件将有助于加深对Java回调方法的理解和实践。

    Java多线程实现回调函数.txt

    Java多线程实现 自定义 的 回调函数. 手写 完成,亲测 完成,可以 直接运行,Demo ,具有一定参考价值,供大家阅读 下载,谢谢

    Java中的回调使用

    在Java中,回调并不是语言内置的特性,但可以通过接口、匿名内部类或Java 8引入的Lambda表达式来实现。 首先,我们来看如何使用接口实现回调。假设有一个`Calculator`接口,它定义了一个`calculateDone`方法: ```...

    C++JNI多线程回调java

    总的来说,理解和实现"C++ JNI多线程回调java"涉及到对JNI接口的深入理解,对多线程编程的掌握,以及对Java并发模型的认识。这是一个高级的跨语言编程话题,需要开发者具备扎实的C++和Java基础。在实际项目中,这样...

    C回调java几种方法

    为了实现更灵活的回调,可以在Java中定义一个接口,让C代码通过实现该接口的本地方法来触发Java回调。在C代码中,可以创建一个Java对象并设置其为接口的实现,然后通过Java对象调用接口方法。 5. **线程本地存储...

    Java回调机制

    Java回调机制是编程中一种非常重要的设计模式,它在异步编程、事件驱动编程和通信中扮演着核心角色。在Java中,回调机制允许一个对象(通常被称为回调对象)向另一个对象注册自身的方法,以便在特定事件发生时,被...

    java接口回调

    在Java编程中,接口回调是一种常见的设计模式,用于实现异步操作或者事件处理。当我们谈论“Java接口回调”时,核心思想是:一个类通过实现特定接口,将自身的某个方法暴露给其他对象调用,当特定事件发生或任务完成...

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

    "如何用Java回调和线程实现异步调用" 在软件开发中,异步调用是一种非阻塞式调用方式,用于在处理比较耗时的任务时保证程序的连续性和实时性。实现异步调用的关键在于解决三个技术难题:程序阻塞问题、异步消息的...

    [iOS]Objective-C利用协议实现回调函数(类似java的回调函数)

    在标题提及的“[iOS]Objective-C利用协议实现回调函数(类似java的回调函数)”中,我们主要讨论的是Objective-C如何通过协议(Protocol)来实现类似于Java中的回调函数功能。这种机制对于异步编程、事件处理以及...

Global site tag (gtag.js) - Google Analytics