回调模式小记

       最近在学习netty,netty是一个NIO client-server(客服端服务器)框架,使用netty可以快速开发网络应用,例如服务器和客服端协议。netty提供了一种新的方式来开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。netty的内部实现很复杂的,单netty提供了简单易用的api从网络处理代码中解耦业务逻辑。netty是完全基于NIO实现的,所以整个netty都是异步的。

       回调是异步处理的一种技术。一个回调是被传递到并且执行完该方法。最早出现在JavaScript中,回调是JavaScript的核心,同时在netty中大量使用。

下面用代码实现一个简单的回调,实现如何使用这种技术来获取数据


首先是一个回调接口,提供了获取数据和处理异常两个方法

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;
	}
	
	
}

下面来测试一下

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));
	}
}

运行输出结果

你可能感兴趣的:(异步,netty,回调)