我正试图在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
所以我有两个问题:我不理解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
。