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

1

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

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();

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

Теги:
methods
design-patterns
mediator

2 ответа

1

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

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

plantUML image

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

1

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню