JAVA回调机制解析

一、回调机制概述

    回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走。俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!
    回调机制是什么?其实回调机制一直在我们身边存在着,只是我们习惯了存在就未曾察觉,懂得其原理就很简单了。
    先打个比方,设置场景如下,教师,成绩差学生A,成绩好学生B,详细步骤如下:
   (1)教师让学生A计算 一道题目 a+b=?
   (2)学生A苦于技能cd(臣妾做不到),不会计算,请求学生B帮忙完成
   (3)学生B根据学生A告诉他的 a和b的值计算出最后的答案,然后传给学生A
   (4)学生A得知到计算的答案,欢喜地告诉教师
二、实现代码解析
    (1)先定义一个统一的接口
public interface CallBack {
	public void solve(int result);
}
    (2)Class A的实现
尤其注意的是,StudentA初始化时,需要传入StudentB的对象,方便在请求帮助的时候有指定的对象
public class StudentA implements CallBack{
	private StudentB mStuB;
	
	public StudentA(StudentB mStuB){
		this.mStuB = mStuB;
	}
	
	public void askQuestion(final int a,final int b){
		new Thread(new Runnable(){

			@Override
			public void run() {
				// TODO Auto-generated method stub
				mStuB.executeMessage(StudentA.this, a, b);
			}
			
		}).start();
	}

	@Override
	public void solve(int result) {
		// TODO Auto-generated method stub
		System.out.println(result);
	}
}

(3)Class B的实现

public class StudentB {
	
	public void executeMessage(CallBack callBack,int a,int b){
		System.out.println("A的问题是:"+a +" + "+ b+"=?");
		
		int result = a + b;
		
		callBack.solve(result);
	}
	
}

 (4)值的初始化

public class CallBackTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 1;
		int b = 1;
		
		StudentB mStuB = new StudentB();
		StudentA mStuA = new StudentA(mStuB);

		mStuA.askQuestion(a,b);
	}
}

 

三、总结
    参考网上经典的诠释如下:
  • Class A实现接口CallBack callback——背景1
   public Class StudentA implements CallBack
  • Class A中包含一个class B的引用b ——背景2  
    Student A初始化的时候,传入Student B的对象 mStuB,便于在执行askQuestion方法时,有指向的mStuB对象
  • class B有一个参数为callback的方法f(CallBack callback) ——背景3
    Student B在执行完请求后,需要回调告知StudentA,故需要通过callback变量来传递,使用了父类引用指向子类对象
  • A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
    mStuA.askQuestion(a,b) -> mStuB.executeMessage(StudentA.this, a, b)
  • 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
    executeMessage() -> callBack.solve(result) (父类引用指向子类对象)
 
四、相关推荐
http://blog.csdn.net/xiaanming/article/details/8703708/
 
posted @ 2017-01-04 17:20  桀骜不驯24  阅读(421)  评论(0编辑  收藏  举报