码迷,mamicode.com
首页 > 其他好文 > 详细

回调模式

时间:2017-06-18 20:03:26      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:question   thread   注册   ati   play   design   exec   ace   ash   

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

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);
}

 

回调模式

标签:question   thread   注册   ati   play   design   exec   ace   ash   

原文地址:http://www.cnblogs.com/heben/p/7045074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!