多态与延迟执行

conditional

上面的类图是针对最近改造的类图。

原先有多个command,执行各自的逻辑。现在由于command涉及的配置需要放缓存,抽象出config。config和command存在一定的映射关系,通过CommandFactory维持。考虑到config存入缓存时会以接口或者抽象类方式,取出时丢失了直接类型。使用VISITOR模式多态创建command。

现有command中有一个是条件型的,会根据执行时的上下文生成新的command并执行。在配置分离后,理论上变成生成新的config转换成command后执行。因为不想在CommandFactory中带入执行上下文(这样就破坏了简单的config-command关系),所以只能延迟到command执行时委托条件command的配置计算得到实际配置,再通过CommandFactory重新生成command,最后执行实际逻辑。

个人认为,这里理解的难点在于延迟执行。如果存在并不能立即决定的逻辑,则可以考虑返回一个实现某个接口的类,并包含执行的相关数据。比如这里返回ConditionalCommand,包含了ConditionalConfig和CommandFactory,在实际执行时计算。并通过CommandFactory的引用创建实际执行的Command后运行逻辑。