回調模式小記

       最近在學習netty,netty是一個NIO client-server(客服端服務器)框架,使用netty能夠快速開發網絡應用,例如服務器和客服端協議。netty提供了一種新的方式來開發網絡應用程序,這種新的方式使得它很容易使用和有很強的擴展性。netty的內部實現很複雜的,單netty提供了簡單易用的api從網絡處理代碼中解耦業務邏輯。netty是徹底基於NIO實現的,因此整個netty都是異步的。
java

       回調是異步處理的一種技術。一個回調是被傳遞到而且執行完該方法。最先出如今JavaScript中,回調是JavaScript的核心,同時在netty中大量使用。api

下面用代碼實現一個簡單的回調,實現如何使用這種技術來獲取數據服務器


首先是一個回調接口,提供了獲取數據和處理異常兩個方法網絡

public interface FetcherCallback {

	void onData(Data data) throws Exception;
	
	void onError(Throwable cause);
	
}

而後是一個提取數據的接口,提供獲取數據的方法
框架

public interface Fetcher {

	void fetchData(FetcherCallback callback);
	
}

具體實現
異步

public class MyFetcher implements Fetcher {

	private Data data;
	
	public MyFetcher(Data data) {
		this.data = data;
	}

	@Override
	public void fetchData(FetcherCallback callback) {
		try {
			callback.onData(data);
		} catch (Exception e) {
			callback.onError(e);
		}
	}

}

public class Data {

	@Override
	public String toString() {
		int r = n / m;
		return n + " / " + m + " = " + r;
	}

	private int m;
	
	private int n;

	public Data(int m, int n) {
		super();
		this.m = m;
		this.n = n;
	}

	public int getM() {
		return m;
	}

	public void setM(int m) {
		this.m = m;
	}

	public int getN() {
		return n;
	}

	public void setN(int n) {
		this.n = n;
	}
	
	
}

下面來測試一下ide

public class Worker {

	
	public void doWork(Data data) {
		Fetcher fetcher = new MyFetcher(data);
		fetcher.fetchData(new FetcherCallback() {
			
			@Override
			public void onError(Throwable cause) {
				System.err.println("an error accour:" + cause.getMessage());
			}
			
			@Override
			public void onData(Data data) throws Exception {
				System.out.println("Data received:" + data);
			}
		});
	}
	
	public static void main(String[] args) {
		new Worker().doWork(new Data(0, 2));
		new Worker().doWork(new Data(1, 2));
	}
}

運行輸出結果
學習

相關文章
相關標籤/搜索