java - Java 观察者模式或发布者-订阅者模式的变体
问题描述
以下 2 种变化的实际观察者模式是什么。
- 在第一个中,观察者负责订阅。
- 但在第二种情况下,Publisher 负责将特定的观察者添加到订阅者列表中。
因为,Web 中有一些实现,它们都将它们作为 Java 中的观察者模式。
-
1.
// Observer is taking the responsibility of subscribing
// Observer.java
@Override
public void subscribe(MessagePublisher publisher) {
publisher.getObservers().add(this);
}
2.
// Publisher is taking the observer to subscribe
// Publisher.java
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
解决方案
观察者是否应该注册自己或让另一个实体处理此责任是应用观察者模式时的实现决策,而不是模式本身的结构方面。出于这个原因,遇到这两种变体也就不足为奇了。
在 GoF 书籍和其他地方记录的模式结构中,Subject
有一个Attach
(and Detach
) 方法作为其接口的一部分。这意味着任何引用主题的实体都可以调用Attach
并执行此注册。
推荐阅读
- java - userDetailsService org.springframework.beans.factory.UnsatisfiedDependencyException 出错
- jquery - 在 Wordpress 中选择角色。用户专业版
- python - 情绪分析中的用户输入或文本文件数据问题
- javascript - 使用javascript在alexa中的xml解析器问题
- tfs - 将查询结果(在任何计算值上)添加到新 WIT
- javascript - 如何随机将字符串中的字母大写
- swift - 非转义闭包的实际用途是什么?
- javascript - 如何在没有编辑器功能的情况下动态更改数据表?
- python - Odoo:one2many 字段仍然添加记录,即使我在零库存时引发错误
- python - Keras 模型不训练层,验证准确率始终为 0.5