在实际应用中遇到的问题是不同省份的报名规则不同,业务逻辑流程不同。于是在系统的配置文件中出现了校验规则的开关项,并在代码中用 if(开关项){} else {} 包围住校验逻辑。一个函数的代码往往有上千行,给修改带来了巨大的麻烦。
用什么方法可以消除这种流程与具体校验方法之间的耦合呢?(因为校验方法之间存在逻辑关系,所以无法使用 Template Method 模式来消除这种耦合)。
于是我设计了如下一个模式来处理这种变化:
class RegInfo:在流程中的实体类,为流程提供判断条件。
class RegCheck:关键为子类定义了 abstract ExecuteCheck() 接口决定流程的下一步,并让子类来实现。
RegCheckIsLegal:RegCheck:封装了流程中具体的业务逻辑,实现了父类的ExecuteCheck()。自己决定流程的下一步。
同上:
RegCheckMgr:流程管理类,它实现了对驱动的驱动。关键是 check() 方法。
客户端:
这个流程管理模式应该是 state 模式的演变。