zoukankan      html  css  js  c++  java
  • 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/
     
  • 相关阅读:
    execute,executeQuery,executeUpdate的区别是什么?
    JDBC访问数据的基本步骤是什么
    什么是JDBC,在上面时候会用到它
    Java 为每个原始类型提供了哪些包装类型:
    Java 为每个原始类型提供了哪些包装类型:
    JDBC访问数据库的基本步骤是什么?
    String 类的常用方法都有那些?
    == 和 equals 的区别是什么
    查询所有课程成绩小于60分的同学的学号、姓名;
    什么是JDBC的最佳实践?
  • 原文地址:https://www.cnblogs.com/Daniel-android/p/6249443.html
Copyright © 2011-2022 走看看