1. 程式人生 > >Java介面回撥詳解

Java介面回撥詳解

一.產生介面回撥的場景

在現實生活中,產生介面回撥的場景很簡單,比如我主動叫你幫我做一件事,然後你做完這件事之後會通知我,"通知我"這個動作就是介面回撥的動作.介面回撥重在理解思就好.再舉個例子用於下面的程式碼演示,老師讓學生做課堂練習,學生做完練習後並告訴老師.

二.什麼是介面回撥

在Java的層面簡單的說一下介面回撥:現有一個介面A,和它的實現類A1,和另外一個有介面A引用的類B,因為類B中有介面A的引用,在B執行完方法後,可以通過介面A的引用,告訴A執行完成了這個方法.由於A是一個介面,所以具體接收執行完成這個方法在它是實現類A1中體現.

三.在程式碼中的使用

以上面老師叫學生做課堂作業為例,我們先建立一個回撥介面,以及用於接收學生做完課堂作業的訊息

public interface BackInterface {
	void backMethod();
	
}

然後定義一個實現類Teacher,功能是讓學生做課堂練習,接收學生做完課堂練習的通知

public class Teacher implements BackInterface {
	
	//因為老師要告訴學生做課堂練習,所以這個傳一個學生的引用
	private Student student;
	
	public Teacher(Student student){
		this.student = student;
	}
	//老師告訴學生做課堂練習
	public void doEvent(){
		System.out.println("老師讓學生做練習...");
		student.doPractice(this);
	}
	//用於接收介面回撥的訊息
	@Override
	public void backMethod() {
		System.out.println("老師接收到學生做完課堂練習的訊息");
	}

}

學生類,功能是做練習,做完之後並告訴老師(回撥)

public class Student {
	
	//學生做課堂練習,並告訴老師
	public void doPractice(BackInterface BackInterface) {
		System.out.println("學生做練習...");
		System.out.println("學生告訴老師做完練習...");
		BackInterface.backMethod();
	}
}

進行測試:

public class BackDemo {
	public static void main(String[] args) {
		Teacher teacher = new Teacher(new Student());
		teacher.doEvent();
	}
}

結果:

我們可以看到回撥完成.在實際開發過程中為了保證效率我們往往釋出任務的時候會做成非同步的,在本例中就是把 "老師讓學生做課堂練習" 做成非同步,具體實現很簡單,就是新建一個執行緒就可以了,也就是把Teacher類中的 "student.doPractice(this);"程式碼改成下面的程式碼:

new Thread(new Runnable() {
			@Override
			public void run() {
			}
		}).start();

還有就是為了程式碼的簡潔,我們常常把Teacher類寫成匿名內部類的形式,程式碼就不演示了
為了方便理解給幾個參考地址:
https://blog.csdn.net/bfboys/article/details/52640587
https://blog.csdn.net/jonsnoww/article/details/68932292