Java 异步消息处理 一
它要能适应不同类型的请求: 本节用 makeString 来说明要求有返回值的请求
用 displayString 来说明不需要返回值的请求
要能同时并发处理多个请求,并能按一定机制调度: 本节将用一个队列来存放请求,所以只能按 FIFO 机制调度,你可以改用 LinkedList,就可以简单实现一个优先级(优先级高的 addFirst,低的 addLast)
有能力将调用的边界从线程扩展到机器间(RMI) 四
分离过度耦合,如分离调用句柄(取货凭证)和真实数据的实现
分离调用和执行的过程,可以尽快地将调返回
现在看具体的实现: public interface Axman { Result resultTest(int count,char c); void noResultTest(String str); } 这个接口有两个方法要实现,就是有返回值的调用 resultTest 和不需要返回值的调用 noResultTest, 我们把这个接口用一个代理类来实现,目的是将方法调用转化为对象,这样就可以将多个请求(多个方法调)放到一个容器中缓存起来,然后统一处理,因为 Java 不支持方法指针,所以把方法调用转换为对象,然后在这个对象上统一执行它们的方法,不仅可以做到异步处理,而且可以将代表方法调用的请求对象序列化后通过网络传递到另一个机器上执行(RMI)
这也是 Java 回调机制最有力的实现
一个简单的例子
如果 1: 做 A 如果 2: 做 B 如果 3: 做 C 如果有1000个情况,你不至于用1000个 case 吧
以后再增加呢
所以如果 C/C++程序员,会这样实现: (c 和 c++定义结构不同) type define struct MyStruct{ int mark; (*fn) (); } My