Шаблон дизайна медиатора: Почему классы должны информировать медиатора о своем поведении?
В следующем классе:
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()
метод.
Вероятно, здесь ничего не вызывается дважды.
Целью посредника является предоставление очень сплоченных услуг, которые позволяют отделить элементы системы. С точки зрения автомобиля, система зажигания не должна знать детали того, что происходит, например, открывается дроссель, вызывается стартер и т. Д., Поскольку эти детали могут изменяться в зависимости от типа системы двигателя.
Итак, вот что, скорее всего, произойдет:
Чтобы знать наверняка, вы должны увидеть, как :Ignition
как называется и что Mediator.ignitionTurnedOn()
на самом деле