回调模式

Posted 注销了

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回调模式相关的知识,希望对你有一定的参考价值。

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

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

 

以上是关于回调模式的主要内容,如果未能解决你的问题,请参考以下文章

Facebook状态回调不适用于片段

更新片段参数的最佳实践?

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

对onActivityCreated片段回调有啥误解吗?

从片段替换片段时,onRequestPermissionsResult 回调不起作用

从 DialogFragment 回调片段