Command (233) - Comportamental

  • Objetivo: Encapsular uma requisição como um objeto permitindo que as requisições sejam enfileiradas, registradas, desfeitas, etc.

  • Motivação: aplicações com menus

  • Também conhecido como: Action, Transaction.

  • Exemplos: Gimp ou Photoshop. GoF pag. 234 e 235.

  • Usos conhecidos:
    • undo
    • logging
    • menus
    • distribuição de tarefas (opcionalmente com prioridades)
    • balanceamento de carga



Memento (283) - Comportamental

  • Objetivo: Sem violar encapsulamento, capturar e externalizar o estado interno de um objeto de forma a restaurar este estado posteriormente.

  • Motivação: undo

  • Também conhecido como: Token

  • Estrutura: GoF pag. 285.

  • Usos conhecidos: undo, migração de objetos, persistência e recuperação, etc.

Chain of Responsibility (223) - Comportamental

  • Objetivo: desacoplar o emissor de uma requisição de seu receptor dando a mais de um objeto a oportunidade para processá-la.

  • Cria-se uma cadeia de objetos receptores e a requisição vai sendo passada de um a outro até que alguém a processe.

  • Exemplo do GoF na página 223: tratamento do evento Help numa aplicação de janelas.

  • Ver diagramas de classe e sequência na wikipedia

  • Dizemos que a requisição (ou mensagem) tem um destinatário implícito.

  • Padrão relacionado: é implementado frequentemente junto com o Composite.
  • Um outro exemplo: logging


Exercício:

Projete uma arquitetura de software para um domínio qualquer de sua escolha utilizando pelo menos 2 dos 3 padrões acima. Crie um diagrama de classes UML para representar tal arquitetura. Identifique pelo menos um benefício e pelo menos um malefício de adotar cada um dos padrões.


Last modified: Tuesday, 24 October 2023, 9:58 AM