Java回调实现

简介:
有个这样的问题:老板(Boss)让工人(Worker)干完活告诉他干的情况如何。
 
实际上是一个典型的回调问题,Java实现如下:
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:18:33 
* 事件接口 
*/
 
public  interface Event { 
     /** 
     * 返回发生事件信息 
     * 
     * @return 事件信息 
     */
 
     public String happendEvent(); 
}
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:18:14 
* 事件A 
*/
 
public  class EventA  implements Event { 
     /** 
     * 返回发生事件信息 
     * 
     * @return 事件信息 
     */
 
     public String happendEvent() { 
         return  "发生了事件 EventA!"
    } 
}
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:18:21 
* 事件B 
*/
 
public  class EventB  implements Event{ 
     /** 
     * 返回发生事件信息 
     * @return 事件信息 
     */
 
     public String happendEvent() { 
         return  "发生了事件 EventB!"
    } 
}
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:20:48 
* 工人 
*/
 
public  class Worker { 
     private Event event;     //事件 
     private String name;     //工人姓名 
     private 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."); 
         //向老板说明发生的情况 
        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; 
    } 
}
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:26:22 
* 老板 
*/
 
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()); 
    } 
}
 
/** 
* Created by IntelliJ IDEA. 
* User: leizhimin 
* Date: 2008-7-31 13:35:38 
* 测试类 
*/
 
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 
 
呵呵,工人干活完成后,自动将发生的事件汇报给老板。
 
当然,如果工人很多,每个人都汇报的话,老板肯定会烦,那么老板可能会下达,发生了严重问题的员工才需要汇报问题。这个时候,需要做个事件过滤。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/90453,如需转载请自行联系原作者
相关文章
|
前端开发 JavaScript Java
java实现异步回调返回给前端
综上,Java中实现异步回调并将结果返回给前端是一项涉及后端异步处理和前端交互的综合任务。在实际项目中,开发人员需要根据应用需求和性能预期选择合适的异步模型与工具,并进行适当的配置和优化。
1074 3
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
1028 0
|
前端开发 Java UED
java实现异步回调返回给前端
通过以上的方式,可以优雅地在Java中实现异步回调并将结果返回给前端,大大提升了应用程序的响应能力和用户体验。
977 1
java线程之异步回调
java线程之异步回调
183 0
|
设计模式 Java
【设计模式】JAVA Design Patterns——Callback(回调模式)
【设计模式】JAVA Design Patterns——Callback(回调模式)
|
Java
Java中异步回调
Java中异步回调
250 0
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
1804 0
JAVA 实现上传图片添加水印(详细版)(上)
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
Java
Java实现拼图小游戏(7)——查看完整图片(键盘监听实例2)
由于在移动和图片中我们已经添加了键盘监听,也继承了键盘监听的接口,那么我们只需要在重写方法内输入我们的代码即可
428 0
|
存储 Java
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
629 0
Java实现图书管理系统