结合案例学习接口回调

本文通过值日场景探讨接口回调的概念,演示如何在Java中使用接口回调实现逻辑抽离。文章还介绍了如何通过匿名内部类和Lambda表达式优化回调函数,展示了函数式接口在简化代码和提高代码复用性上的应用。
摘要由CSDN通过智能技术生成

接口回调目的:类似模板方法,将共性部分作为通用模板,将个性部分抽离出方法由子类个性化实现。
接口回调方式:将【接口I:包含由子类实现的个性化方法】作为【形参】组合到类B中,在类B中处理共性逻辑,其中会调用【接口I】的方法。当个性层的A类(相当于子类)调用B类的方法时,在入参部分就会需要通过匿名内部类个性化实现个性逻辑。

一、接口回调

模拟一个场景——值日,每个学生分配不同的星期范围值日,比如1-3,表示从周日到周二值日(我们以西方为准测试)。

定义一个学生类

public class Student {
   

    /**
     * 学号
     */
    private Long id;

    /**
     * 姓名
     */
    private String name;

    /**
     * 值班范围:1-2 表示 周日到周一该学生值班
     */
    private String onDutyArea;
}

现在由管理员根据值班范围每周生成一个定时计划任务表,方便定时任务每天将当天的数据拿出,给对应的学生做提醒,那么我们就需要将这个值班日期范围拆解,形成一个定时任务计划表。

public class DutyRemindTask implements CallBackDuty{
   

    /**
     * 学生id
     */
    private Long stuId;

    /**
     * 学生姓名
     */
    private String name;

    /**
     * 值班日期:yyyy-MM-dd
     */
    private String dutyDate;
}

此外,我们还需要向我们的学生提供值日明细,即按照id查询,获取都是哪几天值日。

public class DutyDetail {
   

    /**
     * 学生id
     */
    private Long stuId;

    /**
     * 值班日期集合
     */
    private Set<String> dutyDates;
}

我们就可以模拟数据并生成对应格式的数据

@Test
public void testCallBack() {
   
    /*模拟数据*/
    List<Student> students = Lists.newArrayList(
            new Student(1L, "JACK", "1-3"),
            new Student(2L, "JULY", "2-5"),
            new Student(3L, "TOM", "4-5")
    );
	......数据处理过程见下图......
}
定时任务表 明细表
在这里插入图片描述 在这里插入图片描述
//打印结果,西方的1表示周日
[{
   "stuId":1,"name":"JACK","dutyDate":"2021-07-11"},{
   "stuId":1,"name":"JACK","dutyDate":"2021-07-12"},{
   "stuId":1,"name":"JACK","dutyDate":"2021-07-13"},{
   "stuId":2,"name":"JULY","dutyDate":"2021-07-12"},{
   "stuId":2,"name"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于学习libevent,你可以按照以下步骤进行: 1. 了解libevent:libevent是一个开源的事件通知库,它提供了事件驱动的网络编程接口,可以用于开发高性能的网络服务器和客户端应用。它支持多种I/O模型(包括基于事件的和多线程的),并提供了跨平台的兼容性。 2. 安装libevent:你可以从libevent的官方网站(https://libevent.org/)上下载最新版本的libevent,并按照官方文档中的指南进行安装。根据你使用的操作系统不同,安装步骤可能会有所不同。 3. 学习libevent的基本概念:了解libevent中的一些核心概念,如事件循环(event loop)、事件处理器(event handler)、事件回调函数(event callback)等。理解这些概念对于正确使用libevent非常重要。 4. 掌握libevent的使用方法:学习如何使用libevent来编写网络应用程序。这包括创建事件循环、注册事件、定义事件回调函数等。libevent提供了丰富的API,你可以根据自己的需求选择合适的接口进行开发。 5. 深入研究libevent的高级特性:学习libevent的更高级功能,如定时器、信号处理、缓冲区管理等。这些功能可以帮助你更好地控制和优化你的网络应用。 6. 查阅文档和示例代码:libevent的官方网站提供了详细的文档和示例代码,你可以利用这些资源来加深对libevent的理解。此外,还可以参考一些开源项目中使用libevent的实际案例,以便更好地应用于自己的项目中。 记住,学习任何新的库或工具都需要有耐心和实践。不断尝试和练习,结合实际项目,才能更好地掌握和应用libevent。祝你学习顺利!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值