Я использовал шаблон Observer (используя магию AspectJ) в прошлом с некоторым успехом, но обнаружил, что если вы не будете осторожны, он быстро станет кластером .. эээ ... флик?
Быстро стало трудно управлять, а самое главное, чрезвычайно сложно отладить.
Edit:
Чтобы немного расширить мой ответ, мы использовали SWT , а не Swing, поэтому YMMV. Мы в основном использовали AspectJ для подключения передачи данных от компонентов пользовательского интерфейса к объектам модели. Эти модельные объекты были глупыми POJO.
Фактическая бизнес-логика была сделана путем «наблюдения» за объектами модели с помощью AspectJ и запуска требуемого события, если они изменились. Поэтому, если вы измените значение в текстовом поле, AspectJ сработает и скопирует это значение в POJO. Если в этом поле в POJO было событие для бизнес-логики, которое тогда сработало бы. Если эта логика изменяет какие-либо POJO (и это возможно), AspectJ заметит и скопирует значение из POJO в компонент пользовательского интерфейса.