Шаблон дизайна медиатора: Почему классы должны информировать медиатора о своем поведении?

В следующем классе:

public class Ignition {
    private EngineManagementSystem mediator;
    private boolean on;

        public Ignition(EngineManagementSystem mediator) {
        this.mediator = mediator;
        on = false;
        mediator.registerIgnition(this);
    }

    public void start() {
        on = true;
        mediator.ignitionTurnedOn();
        System.out.println("Ignition turned on");
   }

    public void stop() {
        on = false;
        mediator.ignitionTurnedOff();
        System.out.println("Ignition turned off");
    }
    public boolean isOn() {
        return on;
    }} 

Я не уверен в причинах этих строк кода, например:

mediator.ignitionTurnedOn ();

Почему этот класс должен вызывать этот метод, чтобы сообщить посреднику, что зажигание включено? будет ли это означать, что метод вызывается дважды? Один раз по этому методу, а затем внутри самого посредника?

2 ответа

Целью посредника является передача информации между коллегами. Вам нужно только сообщить посреднику то, о чем другие коллеги в вашей системе должны знать.

Я бы рискнул, что в этой системе, возможно, есть еще один класс, возможно, называется Engine который имеет start() Метод также зарегистрирован у посредника.

Когда Ignition вызов метода mediator.ignitionTurnedOn()Скорее всего, посредник тогда называет что-то вроде getEngine().start() изнутри его ignitionTurnedOn() метод.

Вероятно, здесь ничего не вызывается дважды.

Целью посредника является предоставление очень сплоченных услуг, которые позволяют отделить элементы системы. С точки зрения автомобиля, система зажигания не должна знать детали того, что происходит, например, открывается дроссель, вызывается стартер и т. Д., Поскольку эти детали могут изменяться в зависимости от типа системы двигателя.

Итак, вот что, скорее всего, произойдет:

PlantUML изображение

Чтобы знать наверняка, вы должны увидеть, как :Ignition как называется и что Mediator.ignitionTurnedOn() на самом деле

Другие вопросы по тегам