知识卡片

广播链问题与观察者模式跟责任链模式的区别

普通读书笔记卡 · 1872.b.3

内容

应用[[观察者模式的定义与四个角色]]最大隐患是广播链问题:一个观察者同时是另一对象的被 观察者,串联起来类似数据库触发器链,复杂度会急剧恶化。经验做法是限制一条链最多出现一个 双重身份节点。与[[责任链模式的定义与传递判断机制]]的区别在于消息是否可变:观察者广播链 的消息可被相邻节点修改;责任链传递的消息基本不变。发散:判断结构像观察者还是责任链, 关键看节点是否有权重新定义消息内容。

参考来源

- 位置:《设计模式之禅(第2版)》第22章《观察者模式》(源文件:_epub-src/text/part0101.html) - 结论依据:原文用数据库触发器链类比说明观察者广播链的复杂度风险,建议"在一个观察者模式中最多出现一个对象既是观察者也是被观察者……消息最多转发一次",并明确"它和责任链模式的最大区别就是观察者广播链在传播的过程中消息是随时更改的……而责任链模式在消息传递过程中基本上保持消息不可变"。 - 原始内容:一个观察者可以有双重身份,既是观察者,也是被观察者……在一个观察者模式中最多出现一个对象既是观察者也是被观察者,也就是说消息最多转发一次(传递两次)……它和责任链模式的最大区别就是观察者广播链在传播的过程中消息是随时更改的。