使用责任链模式优化业务代码
现有业务中,存在大量复杂的判断,如弹窗逻辑,内部有一系列复杂的if判断,不同弹窗之间存在优先级,当上级弹窗符合条件时代码判断终止,否则继续向下级判断。
1 | function modal (option) { |
这里的函数过大,且不同逻辑都在一起,一方面看着不是很清晰直观,一方面不利于将来的维护,比如调整弹窗优先级等等。可以引入责任链模式进行优化。
责任链模式
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
先给Function原型绑定一个after函数,用于在两个函数之间生成责任链。并定义一个标识’nextSuccessor’,前往下一级责任链。
1 | Function.prototype.after = function(fn) { |
下面对弹窗代码进行改造:
1 | // 追偿弹窗 |
可以看到,原先的弹窗函数拆分成了一个个小函数,这些代码的顺序都无所谓,在最后写modal函数,控制好责任链的顺序,再调用就可以了。既清晰,又易维护,可以方便的调整弹窗的优先级顺序。
这里我进一步将责任链编写用一个函数传入数组来实现:
1 | // 数组转责任链(责任链after函数见polyfill) |
后面的modal改造一下:
1 | const modal = arr2ChainOfResponsibility([ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ahao430 的博客!
评论