• 理解Java接口回调


    初步认识:

     

    实现步骤:

    1、创建一个回调接口。

    2、创建一个回调对象实现回调接口。

    3、创建一个控制器对象,将回调对象作为参数传给控制器对象,控制器对象负责检查某个场景是否出现或某个条件是否满足,当满足时,则调用回调对象的某方法。

    代码示例:

    实例:Boss通知员工做事情,员工完成任务之后告诉Boss完成情况。

    说明:Callback:回调接口。Boss:回调对象。Employee:控制器对象。

    1、创建一个回调接口

    public interface Callback {
        public void yes();
        public void no();
    }

    2、创建一个回调对象实现回调接口 

    //  Boss需要实现回调的接口
    public class Boss implements Callback{
    //    传入一个员工对象
        private Employee employee;
        public Boss(Employee employee) {
            this.employee = employee;
        }
        
    //    告诉员工要做什么事情
        public void doEvent(String event) {
            System.out.println("Boss:"+event);
    //      将当前对象传给员工,员工才可以回调
            employee.doSomething(this, event);
        }
        
    //    员工完成事情后回调的方法
        @Override
        public void yes() {
            System.out.println("Boss:任务完成得很不错,下个月给你涨工资");
        }
        @Override
        public void no() {
            System.out.println("Boss:任务没完成,好好反思一下");
        }
        
    }

    3、创建一个控制器对象,将回调对象作为参数传给控制器对象,控制器对象负责检查某个场景是否出现或某个条件是否满足,当满足时,则调用回调对象的某方法

    public class Employee {
        public Employee(){}
     
    //    完成boss交代的事情,回调接口作为参数穿过来
        public void doSomething(Callback callback, String event) {
            String flag=null;
            System.out.println("Employee:正在做:"+event);
            
    //        根据完成情况通知Boss,即接口回调
            System.out.println("Employee:完成了任务!");
            flag="完成";
            if(flag.equals("完成")){
                callback.yes();
            }
            
            System.out.println("Employee:未完成任务!");
            flag="未完成";
            if(flag.equals("未完成")){
                callback.no();
            }
            
        }
    }

    4、测试:

    public class Test {
        public static void main(String[] args) {
            Employee employee=new Employee();
            Boss boss = new Boss(employee);
            boss.doEvent("写hello world!");
        }
    }

    结果:

    原文链接:https://blog.csdn.net/qq_41630866/article/details/88015833?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control

  • 相关阅读:
    Linux编程之自定义消息队列
    MVC5学习系列--Razor视图(一)
    JS将秒转换为 天-时-分-秒
    自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
    VS2015企业版,社区版,专业版详细对比
    [干货来袭]C#6.0新特性
    WebApp上滑加载数据...
    用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]
    用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
    用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/14068040.html
Copyright © 2020-2023  润新知