Как оповещать контроллер о действиях пользователя?
Решил написать простенькое приложение, используя MVC. Связь между моделью и представлением примерно ясна: Модель - субъект, вьюверы - слушатели. При обновлении данных, модель оповещает всех слушателей. Представление, когда получает эти данные, перерисовывается на их основе.
Какая связь между представлением и контроллером? Как контроллер должен узнать о кликах на кнопки или о движении мыши?
После прочитанных статей пришел к выводу, что представление должно внутри себя хранить ссылку на контроллер и при необходимости делегировать задачи методам контроллера.
Например, в представлении создаем кнопку и внутренний класс, который будет слушателем этой кнопки. Во внутреннем классе, в методе actionPerformed, вызываем определенный метод контроллера. То есть, используется паттерн "Стратегия": представление делегирует часть своих обязанностей стратегии-контроллеру.
Я все правильно понял? Если да, то кто выбирает, какому вьюверу какой контроллер предоставить? Или этим занимается сам контроллер, передавая себя в качестве аргумента в конструктор представления?
-----------------
Второй вопрос: Может ли в приложении быть несколько контроллеров? Если да, то в каких случаях? Как происходит их переключение и обмен данными между ними?