小王内部持有小李,以异步的方式调用小李,问了小李一个问题,问问题的时候,将自己的引用也传给了小李。小李任何时间想回复小王,则使用小王的引用传递消息
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); }
时间: 2024-12-29 11:46:55