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

时间:2019-04-01 15:40:02

标签: java observer-pattern

我正尝试在java中制作一个简单的Mario游戏。有了这个,我想当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 < / p>

1 个答案:

答案 0 :(得分:2)

  

我对观察者模式的不了解

您的GoobmaDeathListener是观察者。它是在可观察的Goomba上观察事件。

您可能希望在此处查看更详细的说明: https://stackoverflow.com/a/13744816/340088

  

我死后如何让多个主题(Goomba)呼叫onGoombaDeath(this)

每个Goomba(可观察)都必须引用观察者列表。很可能您想在中间引入一个类,称为类似GoombaObservers的类,该类管理感兴趣的Observers的列表。它将提供类似notifyGoombaDeath()的方法,该方法在内部进行循环以调用onGoombaDeath()

您可能还想通过java.util.Observable即时查看Java已经提供的功能。