理解一下回调函数Callback Function

在知乎上看到一个很好的解释用来理解回调函数的过程。
大致是说 你去宾馆了然后向前台告知明天六点叫我起床,这句话就大致说明了两个Function 1.我请求叫醒服务 2.宾馆记录下来到具体时间点叫醒你。
这里说明一下:就是你去约定一个时间点之后或者给个标志什么的 当条件满足的时候 宾馆方面就执行方法二,在条件未满足之前你可以去做任何事,不妨碍宾馆方面的执行。
用代码实现这里的逻辑如下:
1.首先需要一个回调函数的接口,双方的一种约定。
2.Guest和Hotel的实体类,这里Guest需要Hotel的引用,因为服务是 Hotel提供的。其次开启一个单独的线程,来表示双方各自工作的关系。
同样Hotel只需要一个具体服务的引用(Callback接口)和具体内容(这里是时间)
简单理解一下:
接口:Callback

package com.callback.demo;

public interface Callback {
           public   void callback(String result);
}

具体实现类Guest

package com.callback.demo;

public class Guest implements Callback {
           Hotel hotel;
           public Guest(Hotel hotel) {
               this.hotel=hotel;
           }
           //客人的告诉宾馆叫醒服务(时间)
           public  void  awake(String  date ) {
               System.out.println("走到前台。。。要求服务");
               //宾馆登记
               new Thread(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    hotel.recordAndWake(Guest.this, date);
                }

               }) {

               }.start();
               //等待服务办理
               System.out.println("等待服务办理");
               try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
               doOtherThing();

           }
           //长夜慢慢  无心睡眠
           void  doOtherThing() {
               System.out.println("吃吃宵夜。。。。。。");
               System.out.println("睡觉了。。。。。。等待叫醒");
           }

    @Override
    public void callback(String result) {
        // TODO Auto-generated method stub
        System.out.println("hotel=============叫醒服务"+result);
    }

}

Hotel

package com.callback.demo;

public class Hotel {
          //提供的服务  需要服务对象  以及服务内容
               public   void   recordAndWake(Callback callback,String  date) {
                   System.out.println("hotel记录时间为====="+date);
                   //模拟长夜慢慢
                   try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                       date="时间到了。。。。客人";
                      callback.callback(date);
               }
}

test

package com.callback.demo;

public class TestCase {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
                    Hotel  hotel = new Hotel();
                    Guest  guest = new Guest(hotel);
                    guest.awake("明天早上6.00");

    }

}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值