博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
比较典型的java回调案例-员工老板
阅读量:4261 次
发布时间:2019-05-26

本文共 2528 字,大约阅读时间需要 8 分钟。

下面是一个典型的回调案例:公司员工工作,工作完成后主管要求员工汇报工作完成情况。

  事件接口:

Java代码 

package com.wxy.callback; 

 

public interface Event { 

    /**

     * 返回发生事件信息

     * @return 事件信息

     */ 

    public String happendEvent(); 

 

   事件具体实现类:

Java代码 

package com.wxy.callback; 

 

public class EventA implements Event { 

 

    @Override 

    public String happendEvent() { 

        return "job has been finished!"; 

    } 

 

 

Java代码 

package com.wxy.callback; 

 

public class EventB implements Event { 

 

    @Override 

    public String happendEvent() { 

        return "job has been finished!"; 

    } 

 

 主管类:

Java代码 

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; 

    } 

 

 员工类:

Java代码 

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; 

    } 

 

 测试类:

Java代码 

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(); 

    } 

 测试结果:

Java代码 

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对象的方法,实现回调功能。设计模式中,观察者模式也是一个典型的应用回调机制的例子。

转载地址:http://crxei.baihongyu.com/

你可能感兴趣的文章
【GStreamer】gstreamer工具详解之:gst-discoverer-1.0
查看>>
【Ubuntu】安装中文输入法
查看>>
【Cmake】执行cmake命令时报错:No XSLT processor found
查看>>
【数据库】sqlite中PRAGMA命令说明
查看>>
【Qt】Qt容器总结
查看>>
【C++】C++11 STL算法(一):非修改序列操作(Non-modifying sequence operations)
查看>>
【C++】C++11 STL算法(二):修改序列的操作(Modifying sequence operations)
查看>>
【C++】C++11 STL算法(三):分隔操作(Partitioning operations)、排序操作(Sorting operations)
查看>>
【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
查看>>
【C++】C++11 STL算法(五):设置操作(Set operations)、堆操作(Heap operations)
查看>>
【C++】C++11 STL算法(六):最小/最大操作(Minimum/maximum operations)、比较运算(Comparison operations)
查看>>
【C++】C++11 STL算法(七):排列操作(Permutation operations)、数值操作(Numeric operations)
查看>>
【C++】C++11 STL算法(八):对未初始化内存的操作(Operations on uninitialized memory)、C库(C library)
查看>>
【数据库】sqlite中的限制:数据库大小、表数、列数、行数、参数个数、连接数等
查看>>
【数据库】SQLite和MySQL之间的对比和选择
查看>>
【数据库】sqlite3数据库备份、导出方法汇总
查看>>
【数据库】适用于SQLite的SQL语句(一)
查看>>
【数据库】适用于SQLite的SQL语句(二)
查看>>
【数据库】适用于SQLite的SQL语句(三)
查看>>
【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
查看>>