为何观察者模式UML类图普遍不标注ConcreteObservable与IObserver的直接依赖?
UML类图省略可推导依赖的核心原因如下:
- 避免冗余标注的行业共识
UML类图绘制的通用原则是不标注可以通过已有关系直接推导的依赖。你提到的ConcreteObservable对IObserver的依赖,完全可以通过两个已有的关系推导得出:ConcreteObservable实现了IObservable接口,而IObservable已经显式声明了对IObserver的依赖。接口的所有实现类天然继承接口的依赖关系,重复标注没有意义。 - 只突出非必然的自定义依赖
类图中绘制依赖箭头的核心作用,是体现实现类自己新增的、不是接口强制要求的依赖。ConcreteObservable在实现IObservable接口的方法时用到IObserver,是接口契约带来的必然结果,不属于这个实现类独有的额外依赖,因此不需要单独标注。如果该实现类在接口要求之外的自定义逻辑中也用到了IObserver,才需要补充对应的依赖关系。 - 平衡类图的信息密度
类图的核心价值是让开发者快速梳理核心类关系,如果所有可推导的依赖都全部标注,哪怕是观察者模式这种简单的类图都会多出大量冗余箭头,结构复杂的系统类图更是会乱到无法阅读。行业普遍的做法是只保留最核心的、无法直接推导的关系,降低阅读成本。
如果你的UML是用于代码生成、全依赖审计这类对精度要求极高的场景,补充你提到的这个依赖箭头是完全合理的,只是常规的架构展示、设计模式讲解类的类图都会省略这类冗余关系。
内容的提问来源于stack exchange,提问作者NPS
相关产品推荐
相关产品推荐

