Шаблон Model View Controller , вероятно, наиболее часто используется. Swing в значительной степени опирается на этот паттерн, где Decorator (который используется для таких вещей, как полосы прокрутки) и Strategy (менеджеры раскладки и т. Д.) Кажутся поддерживающими паттернами.
Что касается альтернатив MVC, вы можете взглянуть на Model View Presenter , но в большинстве реализаций полное разделение будет сильно зависеть от некоторой шины событий, в случае Swing в Наблюдатель (слушатели событий).
Решение datamodel / gui, по-видимому, представляет собой небольшую проблему, но на самом деле довольно сложно правильно управлять указанной шиной событий.
Мой любимый способ сделать это - использовать шаблон Command . Использование шины событий для передачи различных команд делает разделение несколько чистым.
Модель данных выполняет команду некоторым способом (обычно используя связанный объект-обработчик команды), и затем вызывается обратный вызов.
Это на самом деле прославленный MVC, поскольку класс, выполняющий команду, в конечном итоге становится вашим контроллером, но шаблон позволяет модели / контроллеру знать только об объектах обратного вызова. В зависимости от характера вашей программы вы можете реализовать набор классов, о которых знает только представление, используя шаблон Data Transfer Object .
Это мой предпочтительный подход к асинхронным приложениям, таким как GWT.
В настольных приложениях и приложениях для Android вы по-прежнему выполняете асинхронно (Context.runOnUiThread()
и SwingUtilities.invokeLater()
диктуют это), и, следовательно, шаблон команды подходит. Независимо от того, являются ли DTO лучшим подходом для вашего приложения, зависит, но они больше всего конечно отделите модель от вида.