今天说一下责任链模式
以前写mvc的代码的时候,一定是用过filter的,
每个filter可以做一些事情,比如过滤字符,安全检查等等。
这些filter 可以按照你想要的顺序组成一个 chain。
一个chain 就相当于 处理中心,他可以任意的添加各种能力,比如filter,
然后client 给他一个任务,他就可以自由的处理了。
从其命名可以看出,他的关键在于一个"链"字,这个链可以根据用户的需求动态的组合,
好似一个动态的流水线,而流水线最适合处理的场景就是流程化的任务。
我自己的觉得,责任链模非常适合多个步骤组合的流程,并且可以动态的增加步骤,或者调整步骤的顺序。
我自己开发的过程中遇到的需求就是,我需要做一个 ETL的流程, 从一个db数据源把记录转化成
neo4j需要的图模式,这个从 start-end的过程中 有很多步骤,并且未来这一部分可能有很多的变化。
在这个流程中使用 责任链的模式,可以像 流式编程一样处理 我们的 etl过程。
目前,我们的 chain中包含的步骤包括, enrich, 生成Id, 模型转换 等等步骤,并且未来随着业务的需求会做进一步的增加。
另外一个比较经典的例子时 javascript 的事件冒泡机制。
javascript 使用dom 的模型对页面元素建模, 整个页面是一个完全嵌套的DOM盒子结构
每一个盒子都有自己的处理事件的能力,由外到内的组成一个事件响应的链条。当用户点击一个内部盒子的时候,
就由这个元素把事件 从链条从内往外传递,并进行相应的事件响应。
一句话总结, 流程式的需求,可以考虑使用 责任链模式。
网友评论