【发布时间】:2011-04-12 21:13:33
【问题描述】:
责任链模式与装饰者模式有何不同?
【问题讨论】:
-
类似的讨论可以在这里找到:stackoverflow.com/questions/747913/…
标签: design-patterns decorator chain-of-responsibility
责任链模式与装饰者模式有何不同?
【问题讨论】:
标签: design-patterns decorator chain-of-responsibility
我通常认为装饰器是对某事的“添加”,而责任链更像是处理某事。
比较这两种模式(除了苹果和橙子)最大的区别是责任链可以在任何时候杀死链。
将装饰器视为一个分层单元,其中每一层总是进行前/后处理。责任链更像是一个链表,一般1个东西处理。
责任链模式允许多个事物来处理一个事件,但它也让它们有机会在任何时候终止链。
【讨论】:
场景:
考虑一个服务请求(通常是对您的笔记本电脑的管理员访问权限),该请求需要得到您的经理、总监和副总裁的批准。在这种情况下,装饰器模式的行为就像在每个级别都只有来自每个级别的 cmets,最后你会得到一个输出。因此,经理会说“已批准并转发”,同样,主管会说“好的,已批准并转发”,最后是副总裁“已批准”。您的最终输出将是所有 3 个 cmets 的组合。
注意:无论您的请求是否被批准,链条都不会中断。
在责任链中,在每个阶段,个人都有权批准或拒绝。如果在任何级别请求被拒绝,那么您的请求不会进入下一个级别,而是以结果终止。希望这会有所帮助:)
【讨论】: