==Objetivo==
O Padrão Command encapsulaEncapsular uma solicitação como um objeto, odesta queforma lhepermitindo permiteque parametrizarclientes outros objetos comparametrizem diferentes solicitações, enfileirarenfileirem ou registrarfaçam solicitaçõeso eregistro implementar recursos(log) de cancelamentosolicitações dee suportem operações.<ref>FREEMAN, Ericque –podem Useser a cabeça!: Padrões de Projetos (Design Patterns)desfeitas.</ref>
A principal motivação do uso do padrão Command é que algumas vezes é necessário emitir solicitações para objetos sem nada saber sobre a operação que está sendo solicitada ou sobre seu receptor .
Como exemplos de uso do padrão temos menus e controles, que são aplicações que possuem apenas comandos (ações) para serem executados através deles.
==O Padrão==
Também conhecido por Action ou Transaction, é um padrão simples e muito utilizado. Porém ele possui alguns detalhes importantes que precisam ser notados, caso contrário sua implementação pode não trazer tanta reutilização.
O Command tem como objetivo encapsular uma solicitação como um objeto, o que permite parametrizar outros objetos com diferentes solicitações, enfileirar ou registrar solicitações e implementar recursos de cancelamento de operações (desfazer). Ou seja, o objetivo do padrão é transformar um método de uma classe em um objeto, o qual pode executar a ação deste método.
O livro Padrões de Projeto de Erich Gamma <ref name="refname2">diz que a principal motivação do Command é que algumas vezes é necessário emitir solicitações para objetos sem nada saber sobre a operação que está sendo solicitada ou sobre seu receptor.</ref> Exemplificando o que o livro diz, imagine um portão eletrônico que você queira abrir, não é necessário saber como funciona o mecanismo que faz o portão abrir ou de que o portão é feito, você apenas quer abrir o portão e por isso aperta um botão que faz ele abrir.
==Problema==
[[Categoria:Padrões de projeto de software]]
[[Categoria:Engenharia de software]]
{{referências|refs=
<ref name="refname2">GAMMA, Erich; HELM; Richard; JOHSON, Ralph; VLISSIDES, John – Padrões de Projeto – Soluções reutilizáveis de software orientados a objeto.</ref>
}}
|