Command Pattern
SISMO - Sistemas e Mobilidade
http://www.sismo.deinf.ufma.br
Departamento de Informática / UFMA
Junho de 2008
Alexandre Vidal
Padrões de Software
O problema do controle remoto
Programar um controle remoto com vários botões para ligar e
desligar dispositivos
Algumas funcionalidades serão incluı́das posteriormente
Alexandre Vidal
Padrões de Software
Classes dos dispositivos acionáveis pelo CR
Alexandre Vidal
Padrões de Software
Interface e Objetos Command
Alexandre Vidal
Padrões de Software
Usando o objeto Command
Alexandre Vidal
Padrões de Software
Testando o controle remoto
Alexandre Vidal
Padrões de Software
O padrão Command (From:Head First
Alexandre Vidal
Padrões de Software
O Padrão Command
Classificação
Propósito: Comportamental
Escopo: Objetos
Intenção
Encapsular uma solicitação como um objeto, permitindo
parametrizar clientes com diferentes solicitações, enfileirar ou
fazer o registro de solicitações e suportar operações que podem
ser desfeitas
Alexandre Vidal
Padrões de Software
Aplicabilidade do Padrão Command
Quando usar o Command
Parametrizar objetos por uma ação a ser executada
Especificar, enfileirar e executar solicitações em tempos
diferentes
Suportar operações undo (desfazer)
Suportar registro (logging ) de mudanças que possam ser
recuperadas
Estruturar um sistema em torno de transações
Alexandre Vidal
Padrões de Software
Estrutura
Figura: Command - Estrutura
Alexandre Vidal
Padrões de Software
Participantes
Command
Declara uma interface para a execução de uma operação
ConcreteCommand
Define uma vinculação entre um objeto Receiver e uma ação
Implementa Execute() invocando operaçã(ões)o
correspondente(s) nos Receivers
Client
Cria um objeto ConcreteCommand e estabelece o seu receptor
Invoker
Solicita ao Command a execução da solicitação
Receiver
Sabe como executar as operações associadas a uma solicitação
Alexandre Vidal
Padrões de Software
Colaborações
O cliente cria um objeto ConcreteCommand e especifica seu
receptor
Um objeto Invoker armazena o objeto ConcreteCommand
O Invoker emite uma solicitação chamando Execute() no
Command
Quando os comandos podem ser desfeitos, ConcreteCommand
armazena estados para desfazer o comando antes de invocar
Execute()
O objeto ConcreteCommand invoca operações no seu
Receiver para executar a solicitação
Alexandre Vidal
Padrões de Software
Interações entre objetos no Command
Alexandre Vidal
Padrões de Software
Consequências
Command desacopla o objeto que invoca a operação daquele
que sabe como executá-la
Commands são objetos de primeira classe (podem ser
manipulados e estendidos como qualquer objeto)
É possı́vel formar comandos compostos
Para acrescentar novos Commands não precisa mudar classes
existentes
Alexandre Vidal
Padrões de Software
Download

Command Pattern