Comando:
Componentes básicos:
- O comando declara uma interface para comandos abstratos como
execute()
- O receptor sabe como executar um comando específico
- O invocador mantém o ConcreteCommand , que deve ser executado
- Cliente cria ConcreteCommand e atribui Receiver
- ConcreteCommand define ligação entre Command e Receiver
Fluxo de trabalho:
O cliente chama Invoker => Invoker chama ConcreteCommand => ConcreteCommand chama o método Receiver , que implementa resumo método Command .
Vantagem : o cliente não sofre alterações no comando e no receptor. O Invoker fornece acoplamento flexível entre o Cliente e o Destinatário. Você pode executar vários comandos com o mesmo Invoker.
O padrão de comando permite executar um comando em diferentes Receptores usando o mesmo Invoker . O invocador não tem conhecimento do tipo de receptor
Para uma melhor compreensão dos conceitos, ter um olhar para este JournalDev artigo por Pankaj Kumar e dzone artigo por James Sugrue , além de ligação Wikipedia.
Você pode usar o padrão de comando para
Desacoplar o invocador e o destinatário do comando
Implementar mecanismo de retorno de chamada
Implementar a funcionalidade desfazer e refazer
Manter um histórico de comandos
java.lang.Thread
é uma boa implementação do padrão de comando . Você pode tratar o Thread como invocador e classe implementando Runnable como ConcreteCommonad / Receiver e o run()
método como Command .
A versão Desfazer / Refazer do padrão de comando pode ser lida no artigo de Theodore Norvell
Estratégia:
O padrão de estratégia é muito simples de entender. Use esse padrão quando
Você tem várias implementações para um algoritmo e a implementação do algoritmo pode mudar no tempo de execução, dependendo de condições específicas .
Veja um exemplo do componente de tarifa do sistema de reservas de companhias aéreas
As companhias aéreas gostariam de oferecer tarifas diferentes durante diferentes períodos de tempo - meses de pico e fora de pico. Durante os dias de viagem fora do horário de pico, ele gostaria de estimular a demanda oferecendo descontos atraentes.
Principais conclusões do padrão de estratégia :
- É um padrão comportamental
- É baseado em delegação
- Altera as tripas do objeto, modificando o comportamento do método
- É usado para alternar entre a família de algoritmos
- Altera o comportamento do objeto em tempo de execução
Postagens relacionadas com exemplos de código:
Usando o padrão Command Design
Exemplo do mundo real do padrão de estratégia