Design Pattern para Actions Desktop

Olá, alguma recomendação sobre qual padrão de design utilizar para implementar controle de eventos de usuário de um sistema desktop em swing?

o visitor é bem útil para alterações no layout.

vou olhar, mas eu queria um pra manipular os eventos da GUI sem fazer todas as classes implementarem as interfaces de evento (ex. class MinhaTela implements ActionListener, ChangeListener, …). Já pensei em usar InnerClasses por causa do acesso facilitado aos membros da interface, mas não vejo muita diferença nesse método para o citado acima…

Ultimamente eu tenho preferido implementar listeners nos models ao invés das views, com exceção de quando a GUI também age como controller (lembrem-se que Swing é M VC, e não M V C).

No model deverá haver um método fireAconteceuUmaMudança que é disparado quando houver um evento. Por exemplo, AbstractListModel tem fireIntervalAdded, fireIntervalRemoved e fireContentsChanged. Nesse caso, a JList ou JXList atualiza a GUI.

Nota: esse tipo de binding parece estar com os dias contados, graças à JSR 295 (Beans Binding).

Você também pode usar o padrão Command extendendo AbstractAction. Isso é muito interessante para eventos disparados a partir de menus ou barra de ferramentas.

Se optar por essa opção, dê uma pesquisada no Swing Application Framework (JSR 296) e sua anotação @Action. Com isso você ganha grátis uma espécie de injeção de recursos (fontes, cores, ícones, tecla de atalho) e bom suporte para executar tarefas em background.

O ideal é você trabalhar com um modelo de objetos ao invés de lidar diretamente com o Swing. Uma solução desktop que permite que você faça isso é o genesis, um framework brasileiro open-source com documentação em português que suporta binding, ações (@Action), condições e diversas outras funcionalidades que vão permitir uma boa separação entre a sua lógica de apresentação e o modelo Swing em si.