Aha!设计模式(73)-职责链模式(1)
意图
发送者的请求沿着链状路径进行传播,直至有接收者处理为止。这种情况下接收者根据自身判断决定是否处理某个请求,从而避免发送者和接收者之间的耦合。
动机
考虑一个公司管理软件,目前正管理着下面的公司:
公司的很多流程都由下级员工发起,例如报告进度、取得个人信息等。实现这些功能的难点在于:公司的组织结构可能不同,各个部门的职责也会发生变化。例如某些公司2:Worker发出的进度报告由1:Division处理;另外一些公司可能就需要CEO直接处理。我们需要一种设计可以很方便地应对这种变化。答案就是职责链模式。
职责链模式的想法是,请求的发送者只管沿着预定的沟通渠道将请求发送出去,沟通渠道上的节点根据自己的需求决定是否处理该请求。对于公司管理软件的例子来说处理流程是这样的:首先2:Worker向上位组织发出请求。如果有必要,1.Division会处理这个请求。否则将该请求继续上传,直到有节点处理这个请求为止。
比较巧妙的是:公司的组织结构或者流程发生变化时只需要发生变化的部门改变自己的处理逻辑即可。其他部门或者个人不需要任何变动。这就是所谓的解耦合。
虽然组织图一般是树状结构,但请求的传播是由下而上的,呈现一种链式结构。这应该就是职责链这个名称的由来。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】