美文网首页
Java 回调实现

Java 回调实现

作者: Sheldonlv | 来源:发表于2019-12-08 03:29 被阅读0次

    简单说明

    打个比方,就好比有两个类A,B,他们分别有方法a(),a2()跟b()
    A的方法a()调用了B的方法b(),然后b()中又调用回A的方法a2(),这么一来一回的,就是回调机制的过程了。

    回调.png

    简单例子

    就比如小明要约小美去看电影,结果小美要先化妆,等小美化好妆后,再通知小明出发。

    public class Mei {
    
        public void makeUp(){
            System.out.println("小美化妆");
            Ming ming = new Ming();
            // B 调用 A 的方法
            ming.watchMovie();
        }
    }
    
    public class Ming {
    
        public void invite(){
            System.out.println("小明邀请小美去看电影");
            Mei mei = new Mei();
            // A 调用 B 的方法
            mei.makeUp();
        }
    
        public void watchMovie(){
            System.out.println("两人一起去看电影");
        }
    }
    
    测试结果

    回调(接口实现)

    public interface Invitation {
        // 看电影
        public void watchMovie();
    }
    
    public class Mei {
    
        public void makeUp(Invitation invitation){
            System.out.println("小美化妆");
            // B 调用 A 的方法
            invitation.watchMovie();
        }
    }
    
    public class Ming implements Invitation{
    
        public void invite(){
            System.out.println("小明邀请小美去看电影");
            Mei mei = new Mei();
            // A 调用 B 的方法
            mei.makeUp(this);
        }
    
        @Override
        public void watchMovie(){
            System.out.println("两人一起去看电影");
        }
    
        public static void main(String[] args) {
            Ming ming = new Ming();
            ming.invite();
        }
    }
    

    异步回调

    前面的两个例子中,都是小明在喊完小美之后,就一直在干等着小美化妆,这是属于同步行为,但一般而言,小明正常都是在等待的过程中干点自己的事情,比如玩手机什么的,在等待的过程中做别的事情,这就属于异步回调。

    public interface Invitation {
        // 看电影
        public void watchMovie();
    }
    
    public class Mei {
    
        public void makeUp(Invitation invitation){
            System.out.println("小美化妆");
            // 要实现异步,则是需要多线程的帮忙
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                        // 等待的期间小明在玩手机
                        play();
                        Thread.sleep(5000);
                        System.out.println("XX分钟过后");
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }
                    // 化完妆了,告诉小明可以一起去看电影了
                    invitation.watchMovie();
                }
            }).start();
        }
        
        public void play(){
            System.out.println("小明在玩手机");
        }
    }
    
    public class Ming implements Invitation{
    
        public void invite(){
            System.out.println("小明邀请小美去看电影");
            Mei mei = new Mei();
            // A 调用 B 的方法
            mei.makeUp(this);
        }
    
        @Override
        public void watchMovie(){
            System.out.println("两人一起去看电影");
        }
    
        public static void main(String[] args) {
            Ming ming = new Ming();
            ming.invite();
        }
    }
    
    测试结果

    相关文章

      网友评论

          本文标题:Java 回调实现

          本文链接:https://www.haomeiwen.com/subject/lsiebctx.html