Iterador

Iterator é um padrão de design comportamental. Representa um objeto que permite acesso sequencial aos elementos de um objeto agregado sem usar descrições de cada um dos objetos agregados.

Iterador

Por exemplo, elementos como uma árvore, uma lista vinculada, uma tabela de hash e uma matriz podem ser percorridos (e modificados) usando um objeto Iterator.

A iteração pelos elementos é feita pelo objeto iterador, não pela própria coleção. Isso simplifica a interface e a implementação da coleção e promove uma separação mais lógica de interesses.

Um recurso de um iterador totalmente implementado é que o código que usa o iterador pode não saber nada sobre o tipo do agregado iterado.

Essa abordagem é usada com muita frequência. Por exemplo, você envia uma consulta SQL ao banco de dados e, em resposta, ele retorna um iterador (em termos SQL, geralmente é chamado de cursor). E com a ajuda do iterador resultante, você pode obter linhas da resposta SQL uma a uma.

comando

Um comando é um padrão de design comportamental usado na programação orientada a objetos que representa uma ação. O objeto de comando contém a própria ação e seus parâmetros.

Comando

Para chamar um método, você geralmente precisa:

  • referência de objeto
  • nome do método (referência do método)
  • valores de parâmetro de método
  • referência ao contexto que contém os objetos usados

Todos esses dados precisam ser compactados em um objeto - Command ( command ).

Mas não é só isso: afinal, alguém deve executar o comando. Portanto, esse padrão inclui mais quatro entidades: comandos ( command ), um receptor de comando ( receptor ), um chamador de comando ( invocador ) e um cliente ( cliente ).

Um objetocomandosabe sobre o receptor e chama o método receptor. Os valores dos parâmetros do receptor são armazenados no comando. O chamador (invocador) sabe como executar o comando e possivelmente acompanha os comandos executados. O chamador (invoker) não sabe nada sobre um determinado comando, ele só sabe sobre a interface.

Ambos os objetos (o objeto de chamada e vários objetos de comando) pertencem ao objeto cliente. O cliente decide quais comandos executar e quando. Para executar um comando, ele passa o objeto de comando para o chamador (invoker).

O uso de objetos de comando facilita a criação de componentes compartilhados que você precisa delegar ou fazer chamadas de método a qualquer momento sem precisar conhecer os métodos de classe ou os parâmetros do método.

A utilização do objeto caller (invoker) permite manter um registro dos comandos executados sem a necessidade do cliente conhecer este modelo de contabilização (esta contabilização pode ser útil, por exemplo, para implementar comando desfazer e refazer).

Por exemplo, você está escrevendo um programa que permite executar várias tarefas em um cronograma. Por um lado, seu programa acompanha as tarefas e gerencia seu lançamento, por outro lado, pode ter vários executores, cada um dos quais pode executar comandos de seu próprio tipo. Por exemplo, enviar SMS, enviar cartas, enviar mensagens para o Telegram, etc.

Observador

Observer é um padrão de design comportamental. Implementa um mecanismo de classe que permite que um objeto dessa classe receba notificações sobre alterações no estado de outros objetos e, assim, observe-os.

Observador

As classes que outras classes assinam são chamadas Subjects , e as classes assinantes são chamadas Observers .

Ao implementar o padrão Observer, as seguintes classes são comumente usadas:

  • Observable - uma interface que define métodos para adicionar, remover e notificar observadores;
  • Observer - a interface através da qual o observador recebe a notificação;
  • ConcreteObservable é uma classe concreta que implementa a interface Observable ;
  • ConcreteObserver é uma classe concreta que implementa a interface Observer .

O padrão Observer é usado quando o sistema:

  • existe pelo menos um objeto que envia mensagens;
  • há pelo menos um destinatário de mensagens, e seu número e composição podem mudar durante a execução do aplicativo;
  • evita forte acoplamento de classes interativas.

Esse padrão costuma ser usado em situações nas quais o remetente das mensagens não está interessado no que os destinatários fazem com as informações fornecidas a eles.

Visitante

Visitor é um padrão de design comportamental que descreve uma operação executada em objetos de outras classes. Quando o visitante muda, não há necessidade de mudar as classes atendidas.

O modelo demonstra a técnica clássica para recuperar informações de tipo perdidas sem recorrer ao downcast de despacho duplo.

Visitante

Você precisa fazer algumas operações desconectadas em vários objetos, mas precisa evitar poluir seu código. E não há como ou desejo consultar o tipo de cada nó e lançar o ponteiro para o tipo correto antes de realizar a operação desejada.

O modelo deve ser usado se:

  • existem vários objetos de diferentes classes com diferentes interfaces, mas devem ser executadas operações sobre eles que dependem de classes específicas;
  • na estrutura, é necessário realizar várias operações complicando a estrutura;
  • novas operações na estrutura são freqüentemente adicionadas.

mediador

O mediador é um padrão de design comportamental que permite que vários objetos interajam enquanto mantém um acoplamento fraco e evita a necessidade de os objetos se referirem explicitamente uns aos outros.

Mediador

O padrão Mediator permite garantir a interação de muitos objetos, enquanto forma um acoplamento flexível e elimina a necessidade de os objetos se referirem explicitamente uns aos outros.

O mediador define uma interface para troca de informações com objetosColegas, Um mediador particular coordena as ações dos objetosColegas.

Cada classe Colega conhece seu objetoMediador, todos os Colegas trocam informações apenas com um intermediário, na sua ausência teriam que trocar informações diretamente.

Colegasenviar solicitações ao Revendedor/span> e receber solicitações dele. O mediador implementa um comportamento cooperativo encaminhando cada solicitação para um ou maisColegas.