Шаблон наблюдателя, когда несколько субъектов вызывают одного наблюдателя - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь сделать простую игру Mario в 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) когда они умрут

1 Ответ

3 голосов
/ 01 апреля 2019

Что я не понимаю в паттерне наблюдателя

Ваш GoobmaDeathListener является наблюдателем. Это наблюдаемые события на наблюдаемой, вашей Goomba.

Возможно, вы захотите посмотреть более подробное объяснение здесь: https://stackoverflow.com/a/13744816/340088

как я могу сделать так, чтобы несколько Субъектов (Гумба) вызывали onGoombaDeath (this), когда они умирают

Ну, каждый Goomba (наблюдаемый) должен иметь ссылку на список наблюдателей. Скорее всего, вы захотите ввести класс посередине, называемый что-то вроде GoombaObservers, который управляет списком заинтересованных Observers. Он предлагает метод, подобный notifyGoombaDeath(), который внутренне выполняет цикл для вызова onGoombaDeath().

Возможно, вы захотите увидеть, что Java уже предлагает из коробки, с помощью java.util.Observable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...