Шаблоны проектирования для уменьшения сцепления в приложении Swing - PullRequest
7 голосов
/ 28 июля 2010

Привет всем, в настоящее время я работаю над приложением Java Swing, и я искал некоторый опыт.Приложение довольно маленькое, но я замечаю, что по мере того, как база кода увеличивается, у меня очень много связей в моем графе объектов.Я относительно новичок в Swing, но я достаточно долго программировал, чтобы понять, к чему это приведет.

Самая большая проблема, с которой я сталкиваюсь, - это настройка обработки событий.Как мои дочерние окна и объекты должны сообщать события моим объектам более высокого уровня, не имея ссылок на них?Я сделал большое количество веб-кодирования MVC.Хорошо ли подходит этот шаблон для Swing?Должен ли я строить свой собственный контроллер?Я думаю, я просто ловлю паттерны, которые люди нашли полезными в работе с Swing.

Заранее благодарим за помощь.

Ответы [ 7 ]

5 голосов
/ 28 июля 2010

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

Просто Google для Swing Event Bus , и вы найдете.

Если вы используете Guice в вашем GUI, вы также можете взглянуть на guts-events .

2 голосов
/ 28 июля 2010

Да.MVC - это то, что вы должны использовать.Вот очень хорошая статья о MVC и Swing:

http://java.sun.com/products/jfc/tsc/articles/architecture/

1 голос
/ 28 июля 2010

Другой шаблон, который может быть вам интересен, - это MVP (Model View Presenter) -Pattern. Это отлично подходит для более свободной привязки видов к модели. Хорошее объяснение Тодда Снайдера можно найти здесь .

0 голосов
/ 02 июля 2013

Если вы хотите общаться с другими компонентами графического интерфейса в иерархии, то вам следует рассмотреть что-то вроде singleton, которое опосредует вызовы между ветвями. Смотри:

http://blue -walrus.com / 2013/06 / Посредник-модель-в-качели /

0 голосов
/ 29 июля 2010

Я не согласен с людьми, которые предлагают использовать Event bus , потому что

  • из-за кода типа EventBus.subscribe(SymbolListChangeEvent.class, this); весь ваш код будет зависеть от одного экземпляра шины событий, что делает его очень трудным для тестирования,
  • Трудно определить, где используется конкретное событие.

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

0 голосов
/ 28 июля 2010

MVC !!!Затем вы можете использовать также вариант Observer, называемый «Опубликовать / Подписаться», чтобы реализовать поток событий внутри вашего приложения.

0 голосов
/ 28 июля 2010

Как вы уже сказали, ваше намерение использовать MVC, или, возможно, вы уже используете.Как только вы отделите данные (я называю это слоем модели данных).Теперь вам нужно применить шаблон OBSERVER к этим классам модели данных.Все представления (ваши компоненты пользовательского интерфейса), использующие эту модель данных, наблюдают объекты этой модели на предмет любых изменений (через шаблон наблюдателя).

Надеюсь, это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...