Chain Of Responsabilty (Parte III /XXIV)

Como discutimos aqui antes, os padrões de projeto são classificados em três categorias distintas: criacionais, estruturais e comportamentais. O padrão de design Chain of Responsability se enquadra na categoria comportamental e pode ser usado para reduzir o acoplamento entre o remetente de uma solicitação e o objeto receptor que trata a solicitação.

Definição do Gang of Four:

O padrão Chain of Responsability visa evitar o acoplamento do remetente de uma solicitação ao seu receptor, dando a mais de um objeto a oportunidade de lidar com a solicitação, encadeie os objetos e passe a solicitação ao longo da cadeia até que um objeto o trate.

1- O Handler define uma interface para lidar com solicitações.
2- Os objetos ConcreteHandler podem, cada um, lidar com uma solicitação e acessar seu objeto sucessor.
3- O client inicia a solicitação para um objeto ConcreteHandler.

O padrão em questão permite determinar qual objeto tratará a solicitação durante a execução, onde cada objeto pode ou não tratar e/ou passar a mensagem para o próximo conforme o encadeamento.

Exemplo

Simulando um chamado, onde o objeto (Ticket de Atendimento) é tratado conforme as condições do solicitante. A demanda pode passar pelos cargos de Analista, Especialista Técnico e Gerente de Área.

1- Instanciando uma lista de objetos que simulam os chamados.

2- Nesse momento temos a criação da figura do Atendente. Notem que a variável ‘vAtendente’ é uma Interface, assim como o ‘Encadeamento’ dos objetos via construtor. Aqui é formado o encadeamento.

3- Temos a classe ‘TicketAtendimento’, que contém os atributos com as informações do Ticket.

4- Classe ‘ResultadoDaAnalise’ retorna o atendente e seu status (‘Resolvido’ Falso ou verdadeiro).

5- Interface que recebe qualquer das classes a serem instanciadas (‘Analista’, ‘EspecialistaTecnico’ e ‘GerenteArea’). Notem que há a assinatura ‘Resultado’.

6- Classe ‘Analista’ que implementa a interface ‘IAtendente’.

7,8- Aqui temos a variável ‘Proximo’, que recebe via construtor o objeto seguinte que tratará a demanda conforme o fluxo. Se trata da interface ‘IAtendente’.

9- Dentro da classe ‘Analista’ há a implementação do método ‘Resultado’, que contém as particularidades da classe ‘Analista’.

10- Na regra em questão observamos a regra que em caso do tamanho ser > 500, ele chama o método ‘Resultado’ da variável (interface) ‘Proximo’. Nesse momento é que ocorre o encadeamento.

11,12 – No fluxo em questão, após a classe ‘Analista’ não conseguir tratar a demanda (>500), a classe ‘EspecialistaTecnico’ é chamada.

13- Novamente nós temos a regra particular da classe, e caso não seja atendida (>1000), o encadeamento é feito para a classe ‘GerenteArea’.

Resumo

O padrão Chain of Responsibility permite que objetos em uma cadeia passem pela manipulação os objetos encadeados. A solicitação flui pela cadeia até que um link da cadeia a trate.

Aplicabilidade

 Use o padrão quando for essencial executar vários manipuladores em uma ordem específica, onde todas as solicitações passarão pela cadeia exatamente como você planejou.

2 Replies to “Chain Of Responsabilty (Parte III /XXIV)”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *