0

Я столкнулся с проблемой проектирования в своем проекте Java. У меня есть кадр MainWindow с несколькими панелями, которые управляют микроскопом в нашей лаборатории. Каждая из этих панелей имеет некоторые текстовые поля, кнопки и т. Д. Для выполнения конкретной задачи.Передайте данные между контроллерами, которые не должны зависеть друг от друга

Я разработал свою программу после шаблона MVC. Каждая панель имеет свой собственный контроллер. Теперь я столкнулся с проблемой проектирования того, как я должен передавать данные между этими контроллерами, не делая их зависимыми друг от друга.

Два примера:

  1. Одна панель начинает серию получения изображений, который занимает около 10 мин. В то время я хотел отключить элементы управления пользовательского интерфейса всех других панелей, поэтому пользователь не может прервать эту серию.

  2. Как только эта серия заканчивается, я хочу отобразить некоторые метаданные об этом приобретении на другой панели (чтобы предварительно заполнить некоторые поля).

Моих идеи до сих пор:

  • наблюдатель модель: Имея класс наблюдателя, который прослушивает все панельные контроллеры для событий, которые могут заинтересовать контроллер другой панели. Недостаток заключается в том, что наследование контроллеров блокируется классом Observable. Это не проблема (пока). Я действительно не хочу принимать такое решение так рано, хотя ... хм ... И этот класс наблюдателей, вероятно, со временем будет расти.
  • Образец уведомления: Исходя из фона iOS NSNotifications пришло мне в голову. Но в Java нет такой вещи.

Каковы ваши идеи по этой проблеме? Есть ли другие варианты, о которых я не знаю? Является ли мой дизайн плохим в первую очередь?

Дайте мне знать, что вы думаете! Заранее спасибо

ответ

0

Вы можете создать интерфейс Observable, поэтому проблема блокировки наследования не будет. Вы также можете посмотреть на модель Mediator. Основываясь на приведенном вами описании, оно соответствует вашим потребностям.

+0

Как я могу создать интерфейс Observable? Класс, который расширяет Observable, должен унаследовать все необходимые методы для взаимодействия с его наблюдателями. Я никогда не слышал о шаблоне посредника, я посмотрю на это! –

+0

Ну, конечно, если вы используете java.util.Observable, который является абстрактным классом, вы должны использовать наследование, но вы всегда можете написать свой собственный интерфейс с аналогичной ролью (хороший пример можно найти здесь [http: // javarevisited.blogspot.ru/2011/12/observer-design-pattern-java-example.html)). – Gyrotank