多个主题调用一个观察者的观察者模式

Observer Pattern Where Multiple Subjects call one Observer

我正在尝试在 java 中制作一款简单的马里奥游戏。有了这个,我想要一个 listener,因为 Goomba(马里奥的主要敌人)被杀死。经过一些研究,我查看了 Observer Pattern

这是我做的interface

public interface GoombaDeathListener {
    void onGoombaDeath(Goomba goomba);
}

接下来我为我的Player

做了一个class
public class Player extends Entity implements GoombaDeathListener {
    @Override
    public void onGoombaDeath(Goomba goomba) {. . .}
}

我也做了一个Goombaclass

public class Goomba extends Entity {
    ArrayList<GoombaDeathListener> deathListeners = new ArrayList<>();

    public void onDeath() {
        for (GoombaDeathListener listener : deathListeners) {
            listener.onGoombaDeath(this);  
        }
    }
}

我相信(不确定我是否完全理解这一点)这使得 Goomba 成为 observer,我想要不止一个 Goomba 这意味着我会有多个 ArrayLists of GoombaDeathListeners

所以我有 2 个问题:我对 Observer Pattern 有什么不了解的地方,以及我如何让多个 Subjects(Goomba) 调用 onGoombaDeath(this) 当他们死

What am I not understanding of the Observer Pattern

您的 GoobmaDeathListener 是观察者。它正在观察可观察对象上的事件,您的 Goomba

您可能想在此处查看更详细的说明:

how can I have multiple Subjects(Goomba) call onGoombaDeath(this) when they die

好吧,每个 Goomba (Observable) 都必须引用观察者列表。您很可能想在中间引入一个 class,称为 GoombaObservers 之类的东西,它管理感兴趣的列表 Observers。它会提供一个像 notifyGoombaDeath() 这样的方法,它在内部执行循环以调用 onGoombaDeath()

您可能还想看看 Java 已经提供了哪些与 java.util.Observable 开箱即用的功能。