我有几种类型的“服务任务”需要执行(任务 A、B 等)。有些对象定义了在小部件上实际执行这些任务的流程逻辑。所有这些任务都存储在调度程序类的列表中,该调度程序类决定将哪个任务发送到哪个进程类。
这些任务有一些共同的特征,例如完成任务的设施,以及一些共同的功能,例如该任务的总体设计流程时间。
那么什么是强大的设计呢?
我的第一个想法是使用包含这些共享功能的
Service_Task
抽象类。然后,每种类型的任务都会扩展Service_Task
,添加特定于任务的要求。这允许 Scheduler
类拥有 List<Service_Task>
,而不是 Object
列表或每个任务的单独列表。
但是,由于进程逻辑取决于任务类型,这意味着调度程序需要使用
instanceof
检查任务的底层类型,以了解将其发送到哪个进程。我知道这通常被认为是一种代码味道,所以我想知道是否有一种明显更好的方法。
我正在使用 Java。
谢谢!
有几种思考方法,但需要更多信息才能做出明智的选择。
将事物放入列表的目的是您想要对其进行“相同”的操作。如果您为了将任务的类型放入抽象超类型列表中而剥离它们,然后立即询问您正在处理哪种类型,以便可以进行正确的调度,为什么还要麻烦呢?
可以通过
instanceof
或通过单独的列表在您的调度程序中。但它也可能是通过类似访问者模式的流程逻辑类。请原谅语法。我的 Java 已经生锈了。
class ProcessLogic {
public bool deals_with(ConcreteTaskTypeThatIDealWith task) {
return true;
}
public bool deals_with(AbstractBaseType task) {
return false:
}
(但实际上你只是用重载作为变相的
instanceof
,呵呵)
可能是的。但也许如果您有这两个类,一个用于任务,另一个用于处理任务的逻辑,那么您的类可能非常耦合,也许您可以在字段和方法周围提出不同的“边界”,这将允许您调度程序中的单个列表,然后在该列表中的每个对象上调用
processMe()
方法。