观察者模式下,如何在UML序列图中表示遍历接口列表的循环?
观察者模式UML序列图的接口使用问题
对方的说法并不正确
UML序列图完全允许使用接口或抽象类作为交互参与者,这符合UML规范,尤其在观察者模式这类依赖抽象的设计中,用IObserver接口来展示Subject与观察者的交互逻辑才更准确——毕竟Subject依赖的是抽象接口而非具体实现,这正是观察者模式的核心设计意图。
正确的序列图绘制方式
结合你的代码实现,序列图可以这么画:
- 先展示
Subject实例调用自身的tick()方法 - 接着
Subject遍历持有的List<IObserver>集合 - 对集合中的每个
IObserver实例调用notify()方法 - 若需要体现具体实现的细节,可以补充分支,展示
RealObserver作为IObserver的实现类接收notify()调用的过程
多IObserver实现类的处理方案
当存在多个实现类(比如RealObserverA、RealObserverB)时,有两种常用处理方式:
- 通用抽象展示:如果只需体现Subject与观察者的通用交互逻辑,直接用
IObserver作为交互参与者即可,这样能清晰呈现设计的抽象层次,避免序列图因过多具体类变得繁杂。 - 多实现细节展示:若需要体现不同具体观察者的差异化处理,可以在序列图中分别绘制各实现类与
Subject的交互,或使用UML组合片段(如loop遍历集合、alt区分不同实现的处理分支),同时标注这些具体类都是IObserver的实现。
内容的提问来源于stack exchange,提问作者Caleb H.
相关产品推荐
相关产品推荐

