观察者模式多个主体呼叫一个观察者

问题描述 投票:0回答:1

我正试图在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这意味着我有多个ArrayListsGoombaDeathListeners

所以我有两个问题:我不理解Observer Pattern,我怎么能有多个SubjectsGoomba)在他们死的时候叫onGoombaDeath(this)

java observer-pattern
1个回答
3
投票

我不理解观察者模式

你的GoobmaDeathListener是观察者。它正在观察可观察的事件,你的Goomba

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

我怎么能有多个主题(Goomba)在死亡时调用GoombaDeath(this)

那么每个Goomba(Observable)都必须引用观察者名单。很可能你会想在中间引入一个类,称为GoombaObservers,管理感兴趣的Observers列表。它会提供像notifyGoombaDeath()这样的方法,它在内部循环调用onGoombaDeath()

您可能还想看看Java已经开箱即用的java.util.Observable

© www.soinside.com 2019 - 2024. All rights reserved.