2011-10-16 30 views
4

我需要在我的应用程序中实现任务的概念。 在我的项目中,任务是一个必须执行的操作,并通过名称进行标识:每个任务还​​具有输入参数(类型和值)并生成一个或多个输出。序列化一个函数调用

必须实现Task类,我该如何表达“具有某种结果的操作”的概念?我可以将操作的名称存储在字符串属性中,但是如何表达此操作返回的类型? 同样,如何实现操作的输入参数列表,当这些参数也可以是不同类型的?

目标是序列化任务对象并将其发送到另一个节点。接收器分析接收到的Task对象,读取操作的名称并执行相应的功能。

例如,假设节点A和节点B “具有” 以下方法...

节点A的服务:

- double getAreaOfRectangle(double length, double width); 
- double getAreaOfTriangle(double base, double height); 
- double getAreaOfParallelogram(double base, double height). 

节点B的服务:

- double getAreaOfCircle(double radius); 
- double getAreaOfTrapezoid(double base1, double base2, double height). 

如果节点C需要计算矩形的面积,则知道它必须联系节点A并通过指定操作向节点A发送消息(双重areaOfRectangle)和输入(双重宽度和双重高度)。 同样,如果节点C需要计算一个圆的面积,它必须向节点B发送一条消息,指定操作和半径的长度。 为了发送输入,因为它们可以是不同类型(甚至是新的用户定义类型),所以我可以使用一组对象...

某些任务可能依赖于其他任务,即作为输入参数可能至少有另一个任务的输出,因此我需要实现任务输出和另一个任务输入之间的链接。

我应该如何继续定义类?

+1

我相信这是类似的命令模式。 –

+0

为了记录,您正在描述远程过程调用。 –

+1

这描述了一个委托。委托声明描述输入参数。它的BeginInvoke()方法在工作线程上运行委托目标方法。 EndInvoke()方法提供结果。否则巧妙地由Task类包装。 –

回答