Command / Pra resolver qual problema você o utilizou?

Fala pessoal. Estou estudando Design Patterns e atualmente aprendi o padrão Command. Vocês poderiam me contar a sua experiência com esse padrão? Pra qual problema você usou a solução deste Design Pattern? Estou com um pouco de dificuldade para entender o contexto em que deve ser usado. Grande abraço!

Não sei qual livro está acompanhando, mas este link explica bem qual a motivação desse Padrão:
http://www.vico.org/pages/PatronsDisseny/Pattern%20Command/

um exemplo simples (bom, pode ser que nem tanto), mas praticamente todos os frameworks MVC utilizam o pattern Command para definir as actions.

eu atualmente o utilizei…

eu tinha um menu onde determinadas ações do mesmo eram independentes e não necessitavam de um receiver. Estas ações depois foram reutilizadas em outras partes do programa utilizando a interface Command que eu criei. Mas eu tinha outra interface que dependia de um receiver, então criei outros commands específicos para a outra situação. Manutenção moleza depois!

:smiley:

E vcs galera? Pra que vcs o utilizaram?

:idea:

Para ser sincero usei no projeto que estou hoje para duas coisas!

Primeira:

Para configurar uma fábrica de menus popup. Na fábrica eu registro commands para criar o menu popup para cada objeto!

Segunda:

Para determinar ações para cada item de menu! Eu achei muito chato ter que toda fez ficar criando um item de menu e um listener para ele e fazer todas as associações. Então eu criei uma abstração para isso com uma classe que tem o método adicionaItemMenu(String texto, Command comando), lá dentro ele cria os listeners os componentes visuais e faz as associações. No meu command eu ainda fiz com que ele seja um visitor, para que cada command se adicione no menu. Hoje se eu quero adicionar um item no meu menu eu so crio um command e em algum lugar eu o adiciono no menu assim command.autoAdionarMenu(menu).

Mas tarde posto o código do menu aqui se vc quiser ver!

  1. e como era essa fábrica? era uma fábrica de commands? Dá mais detalhes dela.

Exemplo massa de separação de responsabilidades (como mandam os padrões de projetos). Depois você abstraiu mais ainda, mas ainda não conheço o padrão Visitor.

Abração!