Active Object 设计模式

x33g5p2x  于2022-05-05 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(169)

一 接受异步消息的主动对象 

Active是“主动”的意思,Active Object 是“主动对象”的意思,所谓主动对象就是指其拥有自己的独立线程,比如 Thread 实例就是一主动对象,不过 Active Object 设计模式不仅仅是拥有独立的线程,它还可以接受异步消息,并且能够返回处理的结果。

System.gc() 方法就是一个“接受异步消息的主动对象”,调用 gc 方法的线程和 gc 自身的执行线程并不是同一线程。下图为接受异步消息的主动对象的工作原理图。

二 标准 Active Object 设计模式

Active Object 设计模式将一个接口的方法调用转换成可接受异步消息的主动对象,也就是方法的执行和方法的调用是在不同的线程中进行的,那么如何使得执行线程知道应该如何正确执行接口方法呢?我们需要将接口方法的参数以及具体实现封装成特定的 Message 告知执行线程。如果该接口需要返回值,则必须得设计成 Futrue 的返回形式,下图为Active Object 模式设计的结构类图。

三 接口异步执行的时序图

当某个线程调用 OrderService 接口的 findOrderDetails 方法时,事实上是发送一个包含 findOrderDetails 方法参数以及 OrderService 具体实现的 Message 到 Message 队列,执行线程通过从队列中获取 Message 来调用具体的实现,接口方法的调用和接口方法的执行分别处于不同的线程中,因此称该接口为 Active Object。

相关文章