zoukankan      html  css  js  c++  java
  • 回调模式

    小王内部持有小李,以异步的方式调用小李,问了小李一个问题,问问题的时候,将自己的引用也传给了小李。小李任何时间想回复小王,则使用小王的引用传递消息

    Main

    package com.test.design.callback;
    
    public class TestMain {
        public static void main(String[] args) {
            Li li = new Li();
            Wang wang = new Wang(li);
            wang.askQuestion("1 + 1 = ?");
        }
    }

    package com.test.design.callback;
    
    /**
     * 小李
     * @author Ash
     *
     */
    public class Li {
        public void executeMessage(CallBack callBack, String question) {
            System.out.println("小王的问题: "+question);
            
            //模拟小李办自己的事情需要很长时间 
            for (int i = 0; i < 10000; i++) {
                
            }
            String result = "答案是2";
            callBack.solve(result);
        }
    }

    package com.test.design.callback;
    /** 
     * 这个是小王 
     * 实现了一个回调接口CallBack
     */
    public class Wang implements CallBack{
        /** 对小李的引用 */
        private Li li;
        public Wang(Li li) {
            this.li = li;
        }
        
        /**
         * 小王通过这个方法问小李问题
         * @param question
         */
        public void askQuestion(final String question) {
            //这里用一个线程达到异步的效果
            new Thread(new Runnable() {
                
                @Override
                public void run() {
                    //小王调用小李的方法,在这里注册回调接口
                    li.executeMessage(Wang.this,question);
                }
            }).start();
            //小王问完问题可以挂掉电话去打打游戏
            play();
        }
        public void play() {
            System.out.println("你强任你强,我选托比昂");
        }
        /** 
         * 小李知道答案后调用此方法告诉小王
         */
        @Override
        public void solve(String result) {
            System.out.println("小李告诉小王答案: "+result);
        }
    
    }

    回调接口

    package com.test.design.callback;
    
    /**
     * 回调接口
     * @author Ash
     *
     */
    public interface CallBack {
        /**
         * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数 
         * @param result 是答案 
         */
        public void solve(String result);
    }
  • 相关阅读:
    公众号开发完整页面2
    公众号开发完整页面1
    公众号开发15【html页面】
    公众号开发【分享功能】
    公众号开发13【生成二维码】
    公众号开发11【模板消息接口】
    ST05 跟踪SQL
    ABAP 动态生成内表的几种方法
    SMARTFORM & SAPScript
    某种业务场景下,将一个工作区的多个字段整理到一个内表中
  • 原文地址:https://www.cnblogs.com/heben/p/7045074.html
Copyright © 2011-2022 走看看