java - 多个主体调用一个观察者的观察者模式
问题描述
我正在尝试制作一个简单的马里奥游戏java
。有了这个,我想要一个listener
(Goomba
马里奥的主要敌人)被杀的时候。经过一番研究,我调查了Observer Pattern
我做的interface
public interface GoombaDeathListener {
void onGoombaDeath(Goomba goomba);
}
接下来我class
为我自己做了一个Player
public class Player extends Entity implements GoombaDeathListener {
@Override
public void onGoombaDeath(Goomba goomba) {. . .}
}
我也做了一个Goomba
class
public class Goomba extends Entity {
ArrayList<GoombaDeathListener> deathListeners = new ArrayList<>();
public void onDeath() {
for (GoombaDeathListener listener : deathListeners) {
listener.onGoombaDeath(this);
}
}
}
我相信(不确定我是否完全理解这一点)这使得Goomba
,observer
并且我想要多个,这Goomba
意味着我将拥有多个ArrayLists
GoombaDeathListeners
所以我有 2 个问题:我不了解什么,当他们死时Observer Pattern
我怎么能有多个Subjects
( Goomba
) 调用onGoombaDeath(this)
解决方案
我对观察者模式有什么不了解
你GoobmaDeathListener
是观察者。它正在观察可观察对象上的事件,您的Goomba
.
您可能想在这里查看更详细的解释: https ://stackoverflow.com/a/13744816/340088
我怎么能让多个主题(Goomba)在他们死时调用 GoombaDeath(this)
那么每个Goomba
(Observable)都必须有对观察者列表的引用。很可能您想在中间引入一个类,称为类似GoombaObservers
管理感兴趣列表的类Observers
。它将提供一种方法,例如notifyGoombaDeath()
在内部执行循环调用onGoombaDeath()
。
您可能还想了解 Java 已经通过java.util.Observable
.
推荐阅读
- python - 我应该如何修改我的代码以使 twosum 函数起作用?
- python-docx - 当有多个带有 python-docx 的表时,如何仅编辑 1 个表中的 1 个单元格?
- jenkins - 我无法在 Jenkins 管道中运行 pipenv shell
- r - 如何更改数据框中的特定值
- python - PyTorch 在 Detectron2LayoutModel() 上抛出 OSError
- angular11 - 需要使用 web api 服务在 Angular11 中显示新添加的记录/行而不刷新页面
- python - 比较两个变量,最多 x 个小数位
- javascript - 单击另一个下拉菜单后如何关闭一个下拉菜单
- python - 如何使用python提取从API获取数据的图表
- awk - Grep - 打印不匹配的单词