学习
STUDY
constraint 与 resource
发布时间: 2024年12月27日
来源: 西工大
点击数: 85

1.  设计逻辑

群智感知应用中关键的两个因素是任务与完成任务的参与者。在 CrowdOS Kernel 中任务被定义为包含一组约束 constraint 包) 条件的开发者自定义任务resource ), 参与者为包含一组能力的开发者自定义参与者resource 包) 

任务 Task(实际情况为实现 Task 接口的程序员自定义实体类)     canAssignTo()               Participant(实际情况为实现 Participant 接口的程序员自定义实体类)。

每一个约束(实际情况为实现 Constraint接口的程序员自定义实 体类)通过方法 satisfy(),检测某条件(实际情况为实现 Condition

口的程序员自义定的实体类) 是否满足自身要求。

任务能否分配给某个参与者的充分必要条件为:任务的所有约束  Constraint)条件都要被该参与者所具备的能力(Ability)满足(在  目前的术语中,参与者的能力(Ability)与满足约束的条件(Condition

是同一个意思) 。在具体实现中, 方法canAssignTo()会做两个检查:

1. 检查对于任务要求的某约束类型,该参与者是否具体满足该类 型约束的能力  例如, 任务要求在某一区域执行任务, 此时

需要坚持参与者是否提供了自己的 GPS 信息。

2. 检查参与者所具有的某个能力, 是否是能满足该约束的条件。

例如,检查参与者的 GPS 位置信息是否在任务要求的范围内。

设计逻辑图如下所示:

 

 

2.  设计模式

constraint 包与 resource 包中的类实现了一种 Double Dispatch   (双分派的另一个常用的实现是 Visitor 模式)  同时使用了一些反射技术优化了代码实现 。具体类图如下:

 

3.  其他内容

constraint 包中包含了构建任务的 Constraint 接口和构建参与者  Condition 接口, 并且提供了一 部分实现简单实现  外,  constraint.wrapper 包中, 提供了基础类型的 Condition 版本 (此处的逻辑与 JAVA 包装类相同) 

 

resource 包中除过关键的 Task Participant 接口外,还提供了对 应的 Abstract Class 分别为 AbstractTask  AbstractParticipant  当程 序员开发自定义任务和参与者时,只要继承对应的抽象基类,而不必 从实现基础接口开始(此处的设计逻辑与 JAVA Container 部分设计思路相同) 。此外还提供了一些示例性的实体类。