Java回調(diào)函數(shù)和觀察者模式是Java語言的兩種不同的編程方式。回調(diào)函數(shù)是指一個(gè)函數(shù)可以作為參數(shù)傳遞給另一個(gè)函數(shù),并且可以在需要時(shí)被調(diào)用。觀察者模式是指一個(gè)對象可以被多個(gè)觀察者觀察,并且當(dāng)對象狀態(tài)改變時(shí),所有觀察者都會(huì)收到通知。
在Java中,回調(diào)函數(shù)可以使用接口實(shí)現(xiàn)。一個(gè)接口可以定義一個(gè)回調(diào)方法,并且具體的實(shí)現(xiàn)由調(diào)用方提供。以下是一個(gè)簡單的回調(diào)函數(shù)示例:
interface SomeInterface { void callbackFunction(); } class Caller { void doSomething(SomeInterface callback) { //做一些事情 callback.callbackFunction(); //調(diào)用回調(diào)函數(shù) } } class CallbackImpl implements SomeInterface { @Override void callbackFunction() { System.out.println("回調(diào)函數(shù)被調(diào)用了!"); } } //調(diào)用示例 Caller caller = new Caller(); SomeInterface callback = new CallbackImpl(); caller.doSomething(callback);
觀察者模式在Java中的實(shí)現(xiàn)可以使用Java自帶的觀察者模式類庫。以下是一個(gè)簡單的觀察者模式示例:
import java.util.Observable; import java.util.Observer; class ObservableData extends Observable { private int data; public void setData(int newData) { data = newData; setChanged(); //標(biāo)記狀態(tài)已經(jīng)改變 notifyObservers(data); //通知所有觀察者狀態(tài)已經(jīng)改變 } } class ObserverImpl implements Observer { @Override public void update(Observable o, Object arg) { int data = (Integer) arg; System.out.println("數(shù)據(jù)已經(jīng)改變,新數(shù)據(jù)為:" + data); } } //調(diào)用示例 ObservableData observableData = new ObservableData(); Observer observer = new ObserverImpl(); observableData.addObserver(observer); observableData.setData(123);
通過以上兩個(gè)示例,我們可以看到回調(diào)函數(shù)和觀察者模式的不同之處。回調(diào)函數(shù)通常是定義在調(diào)用方并且具體實(shí)現(xiàn)由被調(diào)用方提供。觀察者模式則是一個(gè)對象允許多個(gè)觀察者觀察,對象狀態(tài)改變時(shí)通知所有觀察者。