Padrão de design 10 padrão de cadeia de responsabilidade

fundo

Temos esse cenário, se você precisar ser reembolsado em uma viagem de negócios. Os aprovadores do seu formulário de reembolso são: gerente de projeto, diretor de departamento, chefe de departamento e diretor financeiro. Claro, você não precisa saber o nome, número de telefone, endereço do escritório e outras informações de cada aprovador. Você não precisa consultar esses aprovadores um por um para aprovação.

Uma solução comum é que você inicie uma solicitação de aprovação, seu gerente de projeto a submeta ao diretor do departamento após a aprovação, o diretor do departamento a submeta ao chefe do departamento após a aprovação e a pessoa responsável pelo departamento a submeta à pessoa responsável pelas finanças para aprovação. Dessa forma, você só precisa iniciar uma solicitação e não precisa se preocupar com a aprovação subsequente.

Qual é o modelo de cadeia de responsabilidade

Evite acoplar o remetente de uma solicitação a seu receptor, dando a mais de um objeto a chance de lidar com a solicitação. Encadeie os objetos de recebimento e passe a solicitação ao longo da cadeia até que um objeto a trate. , Evitando assim a relação de acoplamento entre o remetente e o receptor da solicitação. Conecte esses objetos em uma cadeia e transmita a solicitação ao longo dessa cadeia até que haja um objeto para processá-la.)

O modelo de cadeia de responsabilidade tem vantagens óbvias: reduz o acoplamento entre o objeto de solicitação e o objeto de processamento, o objeto de processamento é fácil de expandir e a flexibilidade de atribuição de objetos de processamento é aprimorada.

A cadeia de responsabilidade simplifica a conexão entre os objetos. Cada objeto precisa apenas manter uma referência ao seu sucessor e não precisa manter uma referência a todos os outros processadores, o que evita o uso de várias instruções if ou if ... else.

Estrutura da cadeia

O modelo da cadeia de responsabilidade é composto principalmente de 3 elementos:

  • Função Abstract Handler (Handler): Defina uma interface para processar solicitações, incluindo métodos de processamento abstratos e uma conexão subsequente.

  • Função do manipulador concreto: implementar o método de processamento do manipulador abstrato, determinar se a requisição pode ser processada, e se pode tratar a requisição, será processado, caso contrário a requisição será encaminhada ao seu sucessor.

  • Função do cliente: Criar uma cadeia de processamento e enviar uma solicitação ao objeto manipulador específico no topo da cadeia, sem se importar com os detalhes do processamento e do processo de entrega da solicitação.

O diagrama de estrutura é o seguinte:

Diagrama da estrutura da cadeia de responsabilidade

Código

Handler

Defina uma classe de execução abstrata, que possui um método abstrato para processar solicitações.

ConcreteHandler1

HandlerDa mesma forma, podemos estender essa classe de implementação ConcreteHandler2.

O código de teste é o seguinte:

Resultado dos testes:

具体处理者2负责处理该请求!

Pontos de vista sobre o modelo da cadeia de responsabilidade

Então, quando devemos usar o modelo de cadeia de responsabilidade de forma adequada?

Geralmente, se vários objetos tratam de uma solicitação, qual objeto precisa ser usado é determinado pela chamada real. Nesse cenário, podemos usar o modo chamador.

Se você desenvolveu um sistema de gestão, já desenvolveu uma função de aprovação de processo? Você pode pensar se pode usar o modelo da cadeia de responsabilidade nesse sentido.

Além disso, no sistema de pedidos, é melhor usar esse padrão de design no processamento do status do pedido?

No entanto, deve-se notar que o método recursivo é utilizado no objeto, se o link for longo também terá um certo impacto no desempenho do sistema. Portanto, o uso do modo de cadeia de responsabilidade requer o controle do comprimento do elo. Por exemplo, defina o número máximo de nós em Handler. Se o número de nós exceder este número máximo, o estabelecimento do link não é permitido.

No modo de cadeia de responsabilidade, cada classe de implementação precisa apenas prestar atenção à sua própria lógica de negócios. Quanto ao que precisa ser tratado por si, deixe a classe pai decidir, ou seja, a classe pai realiza a função de transmissão de solicitação, e o filho O processamento de solicitações de implementação de classe está em conformidade com o princípio de responsabilidade única e cada classe de implementação completa apenas uma ação ou lógica.

O modelo de cadeia de responsabilidade pode expandir bem os nós. Aqui está um cenário, como desenvolver um sistema de aprovação de reembolso. No início, você apenas o desenvolvia, desde que o gerente de projeto o reembolsasse. No entanto, a situação real é que o valor do reembolso é muito grande, o gerente do projeto não pode mais ser o mestre e o gerente do departamento é obrigado a reembolsar. Se usarmos o modelo de cadeia de responsabilidade, podemos estabelecer um novo nó de gerente de departamento por trás do primeiro processador. Ao ligar, basta selecionar o nó do gerente de departamento.

Veja, esse método de expansão resolve muito bem o problema de mudança de requisitos.

Recomendado no passado

Leia o código QR para ficar mais emocionante. Ou pesquise Lvshen_9 no WeChat , você pode responder para obter informações em segundo plano

1.回复"java" 获取java电子书;

2.回复"python"获取python电子书;

3.回复"算法"获取算法电子书;

4.回复"大数据"获取大数据电子书;

5.回复"spring"获取SpringBoot的学习视频。

6.回复"面试"获取一线大厂面试资料

7.回复"进阶之路"获取Java进阶之路的思维导图

8.回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

9.回复"总结"获取Java后端面试经验总结PDF版

10.回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

11.回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Outro: Clique em [ Meus benefícios ] para ter mais surpresas.

Acho que você gosta

Origin blog.csdn.net/wujialv/article/details/109193591
Recomendado
Clasificación