设计模式之责任链模式
我们程序中要避免大而全的代码,一来实现功过多,修改起来会影响到好几个业务功能,甚至牵扯到核心业务。二来无法复用,只能重新复制其中部分代码,作为一个新的函数使用,下次修改就需要同时修改这两个地方,很容易引入BUG。
针对这种情况,我们可以引入职责链模式。每个模块只处理自己模块的内容,然后将处理结果传递给下一个需要处理的模块。直到职责链中的所有模块都处理完成自己的职责,再将结果返回。当然如果中间处理的模块判断可以终止职责链传递,可以阻止职责链往下传播。
比如公司有个公共系统,拥有全局配置。系统里可以创建多个用户组,每个组的配置可以单独修改,组里保存的是与系统的差异信息,系统增加功能后,组能立刻接收到。每个用户组里面的用户也可以单独修改配置,用户保存的是与用户组的差异信息,组功能增加后用户能立即接收到。目前有三种需求,获取系统的配置,获取用户组的配置,获取单独用户的配置。采用职责链模式,分别定义获取系统配置信息,组差异配置信息,单个用户差异配置信息。
目前有三条职责链。系统职责链,用户组职责链,单个用户职责链。如果需要获取用户的配置,需要三个链条分别依次执行,得到最终结果。如果获取用户组配置,则只需要系统职责链,用户组职责链。后期如果需要增加新的功能,比如系统的新增配置不对某些用户组开放,不需要修改现有代码,只需要添加一个组过滤职责链,添加在系统职责链,用户组职责链中间,即可实现。