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 部分设计思路相同) 。此外还提供了一些示例性的实体类。