【发布时间】:2019-09-15 06:36:17
【问题描述】:
我正在模拟一种情况:
- NotificationBox:观察者
- list1、list2、list3:主题
现在我将使用观察者模式制作一张图表来描述每个列表实现不同类型的 notify() 的事实(例如,列表状态的某些变化只需要通知某个观察者,使用一些标准)
我做了类似的东西:
在这种情况下,每个主体都会重写 notify 方法,以便仅根据某些标准通知观察者的某个子集,并使用正确的更新方法。
示例
ListaMDDpubblico 是由某个文件组成的列表,每个文件都有一个特定的标签。当一个文件被加载时,只有与“喜欢”文件标签的用户相关联的notificationBox才应该使用updateMDD来通知。
它对 [GoF] 友好吗?
或者我需要制作3个不同的Subject抽象类,每个都以列表方式实现notify方法?
提前致谢
[编辑]
经过对答案和评论的一些推理,我对这种情况的另一种可能的设计是:
通过这种方式,每个更改都会通知所有订阅的观察者(针对每种不同类型的主题),并且了解是否必须考虑通知的逻辑在由 notificationBox 实现的更新方法中建模(因此现在的通知是广播和每个 ConcreteSubject 不需要对具体观察者一无所知)。
【问题讨论】:
-
让设计 GoF 友好的原因是什么?我不是为了制作模式而建模,而是使用模式来建模它们适合的位置。
-
是的,抱歉,我不解释上下文。是为了考试,需要将两种模式应用于建模的类图。假设问题是通知通知框列表状态更改,是正确使用观察者模式吗?
-
你不能覆盖
notify,因为每个实例都有自己订阅的观察者。 -
但是通知方法类似于“对于所有观察者都执行:observer.update”,我需要对这样一个事实进行建模,即在每个主题中都有一个不同的观察者子集应该被通知更改根据具体标准,不同的主体需要调用不同的更新方法。见例子。如果我不覆盖通知,我如何对三个主题的不同行为进行建模?
-
关于您的编辑的问题:1) 除了 PaginaDiCorso 之外还有其他 SubjectPDC 课程是否现实? 2)您的 NotificationBoxObs 是否真的继承自 3 个其他类(多重继承或多个接口的实现)还是相反?
标签: design-patterns uml observer-pattern