基于观察者模式的UML类图关联类型技术咨询
问题解答
1. ISubscriber与IPublisher之间的关联类型
这是聚合(Aggregation)关联,通常为双向:
- 从IPublisher角度:发布者会维护一个ISubscriber实例的集合(比如
List<ISubscriber>),用来推送SQL查询通知。这是单向聚合——发布者“持有”订阅者的引用,但订阅者完全可以脱离发布者独立存在。 - 如果ISubscriber的实现类需要主动取消订阅、或者追踪自己订阅的发布者,那ISubscriber也会持有IPublisher的引用,此时就变成双向聚合关联。
- UML里用空心菱形标注在IPublisher一侧,指向整体(发布者),表示部分(订阅者)可独立于整体存在。
2. 领域层类与DataAccess类之间的关联类型
属于单向依赖(Dependency)或单向关联(Association),取决于具体实现:
- 要是领域层类只在某个方法内部临时获取DataAccess实例来执行SQL(比如通过工厂类获取),这就是依赖——UML里用虚线箭头指向DataAccess,代表领域层类“使用”DataAccess的功能,但不长期持有它的引用。
- 要是领域层类通过构造注入、属性注入等方式长期持有DataAccess的实例,那就是单向关联——UML里用实线箭头指向DataAccess,代表领域层类持续“知晓”并使用DataAccess的服务。
- 注意:DataAccess是独立的持久化服务类,领域层类不会控制它的生命周期,所以绝对不会是组合(Composition)关联。
内容的提问来源于stack exchange,提问作者Aleksandar
相关产品推荐
相关产品推荐

