代码改变世界

Java回调机制

2017-03-19 11:33  Self_made  阅读(251)  评论(0编辑  收藏  举报

回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,比较经典的回调方式:

  • class A实现接口CallBack callback,重写其中的某个方法D—— 背景1
  • class A中包含一个class B的引用b —— 背景2
  • class B有一个参数为callback的方法f(CallBack callback) —— 背景3
  • A的对象a调用B的方法 f(CallBack callback) —— A类调用B类的某个方法 C
  • 然后b就可以在f(CallBack callback)方法中调用A的方法 —— B类调用A类重写的接口中的方法D

下面通过例子来实异步回调机制。

首先建立一个接口

public interface Callback {
	
	public void solve(String msg);
}  

class A实现接口CallBack

public class A implements Callback {
	
	private B b;//引用B的对象
	
	public A (B b) {
		this.b = b;
	}

	//通过这个方法问B问题
	public void ask(String question) {
		//这里用一个线程来表示异步
		new Thread(new Runnable() {
        	@Override
        	public void run() {
				//A调用B中的方法,在这里注册回调接口 
				b.answerQuestion(A.this, question);
        	}
		}).start(); 
	}

	//这里A可以做一些其他的事情

	//B知道答案后调用此方法告诉A,就是A的回调方法 
	@Override
	public void solve(String s) {
    	System.out.println("答案是:" + s);
	}
	
}  

建立class B

public class B {

	public void answerQuestion(call_back cb, String s){
    	System.out.println("A 的请求是:" + s);
    
    	try {
        	Thread.sleep(1000);
        	//做一些事情
    	} catch (InterruptedException ex) {
        	ex.printStackTrace();
    	}
    
    	String result = "这个";
    	//调用A中的方法,即B类反过来调用A的方法D
    	cb.solve(result);
	}
}  

新建一个测试类

public class Test {

	public static void main(String[] args) {
    
    	B b = new B();
    	A a = new A(b);
    	
    	a.ask("一个问题");
	}

}