Cenários de uso de padrões de design

classificação

Tipo de criação: padrão singleton, padrão de fábrica simples, padrão de método de fábrica, padrão de fábrica abstrato

Tipo estrutural: modelo de agência

Comportamental: Modo Observador

Introdução

Modo singleton

** Definição: ** Certifique-se de que uma classe tenha apenas uma instância e forneça um ponto de acesso global para acessá-la.

Diagrama de estrutura:
Insira a descrição da imagem aqui
Vantagens:

  • Alcançou acesso controlável à instância única
  • Para alguns objetos que precisam ser criados e destruídos com frequência, o desempenho do sistema pode ser melhorado

Desvantagens:

  • Não é adequado para alterar objetos.Se os objetos do mesmo tipo sempre mudarem em diferentes cenários de caso de uso, os singletons causarão erros de dados e não poderão salvar o estado um do outro.
  • Não há camada de abstração, o que não conduz à expansão
  • Responsabilidades excessivas, violando o princípio da responsabilidade única

cenas a serem usadas:

  • No caso de compartilhamento de recursos, evite desempenho ou perda causada pela operação de recursos. Como no arquivo de log acima (sempre aberto, pois só pode haver uma instância para operar, caso contrário o conteúdo não é fácil de adicionar), aplique a configuração.
  • No caso de controle de recursos, é conveniente a comunicação entre recursos. Como pool de threads e assim por diante.

Modo observador

** Definição: ** define uma relação de dependência um-para-muitos, permitindo que vários objetos observadores monitorem um determinado objeto sujeito ao mesmo tempo. Este objeto sujeito notificará todos os objetos observadores quando o estado mudar, para que eles possam se atualizar automaticamente.

estrutura:
Insira a descrição da imagem aqui

  • Subject: Tema abstrato (observador abstrato), a função do tema abstrato salva todos os objetos do observador em uma coleção, cada tema pode ter qualquer número de observadores, o tema abstrato fornece uma interface para adicionar e excluir objetos do observador.
  • ConcreteSubject: Tópico específico (observador específico), esta função salva o estado relevante no objeto observador específico e envia uma notificação a todos os observadores registrados quando o estado interno do tópico específico muda.
  • Observer: Abstract Observer é uma classe abstrata do Observer, que define uma interface de atualização para se atualizar ao ser notificado de uma mudança de tema.
  • ConcrereObserver: Um observador específico, que implementa a interface de atualização definida pelo observador abstrato, para que ele possa atualizar seu próprio estado quando notificado de uma mudança de tema.

cenas a serem usadas:

  • No contexto do comportamento de associação, deve-se notar que o comportamento de associação é separável, não um relacionamento "combinado".
  • Eventos multinível acionam cenas.
  • Cenários de troca de mensagens entre sistemas, como o mecanismo de processamento de filas de mensagens e barramentos de eventos.

** Vantagens: ** Decoupling , para que ambos os lados do acoplamento dependam da abstração, para que suas respectivas transformações não afetem a transformação do outro lado.

Desvantagens: ao aplicar o modo de observador, você precisa considerar as questões de eficiência de desenvolvimento e eficiência operacional . O programa inclui um observador e vários observadores. O conteúdo de desenvolvimento e depuração será mais complicado e a notificação de mensagens em Java geralmente é A execução sequencial, então um observador travado, afetará a eficiência geral da execução, neste caso, geralmente usa a implementação assíncrona.

Modelo de agência

** Definição: ** Fornece um proxy para outros objetos para controlar o acesso a este objeto. (Compras, litígio)

estrutura:
Insira a descrição da imagem aqui

  • Assunto: Uma classe de assunto abstrato que declara o método de interface comum do assunto real e do agente.
  • RealSubject: A classe sujeito real define o objeto real representado pelo proxy.O cliente chama indiretamente os métodos da classe sujeito real através da classe proxy.
  • ProxySubject: A classe proxy contém uma referência à classe de assunto real e chama o método de interface correspondente na classe de assunto real nos métodos de interface que implementa.
  • Cliente: classe cliente.

** Implementação: ** A classe proxy contém a classe de assunto real (delegada), e a chamada final é o método implementado pela classe de assunto real (delegada)

Tipos de:

  • Proxy remoto: Fornece uma representação local para um objeto em diferentes espaços de endereço, para que o sistema possa ocultar a parte do servidor do assunto .
  • Agente virtual: Use um objeto proxy para representar um objeto que consome muitos recursos e crie-o quando for realmente necessário.
  • Proxy de segurança: usado para controlar os direitos de acesso de objetos reais .
  • Orientação inteligente: ao chamar um objeto real, o proxy lida com outras coisas, como calcular a contagem de referência do objeto real e liberá-lo automaticamente quando não há referência ao objeto; ou ao acessar um objeto real, verificando se pode ser bloqueado, para garantir que outros objetos não possam alterá-lo.

** Cenário de uso: ** Quando você não pode ou não deseja acessar um objeto diretamente, pode acessá-lo indiretamente por meio de um objeto proxy.

Padrão de fábrica simples

** Definição: ** Defina uma classe para ser responsável pela criação de instâncias de outras classes. As instâncias criadas geralmente têm uma classe pai comum

estrutura:
Insira a descrição da imagem aqui

vantagem:

  • Permite que os usuários obtenham instâncias de classes correspondentes de acordo com parâmetros, evitando a instanciação direta de classes e reduzindo o acoplamento.

Desvantagens:

  • A classe factory concentra a lógica de criação de todas as instâncias (produtos), uma vez que a fábrica deixa de funcionar normalmente, todo o sistema será afetado;
  • Violando o "princípio abrir-fechar", uma vez que um novo produto é adicionado, a lógica de fábrica tem que ser modificada, o que tornará a lógica de fábrica muito complicada.
  • Como o modelo de fábrica simples usa métodos de fábrica estáticos, os métodos estáticos não podem ser herdados e reescritos, o que fará com que a função de fábrica falhe em formar uma hierarquia com base na herança.

cenas a serem usadas:

  • A classe fábrica é responsável por criar menos objetos.
  • O cliente conhece apenas os parâmetros passados ​​para a classe de fábrica e não se preocupa em como criar o objeto (lógica).

Padrão de método de fábrica

** Definição: ** Defina uma interface para criar objetos, deixe a subclasse decidir qual classe instanciar e atrasar a instanciação de uma classe para sua subclasse

Estrutura:
Insira a descrição da imagem aqui
Vantagens:

  • Está mais de acordo com o princípio abrir-fechar. Ao adicionar um novo produto, você só precisa adicionar a categoria de produto específica correspondente e a subcategoria de fábrica correspondente.
  • Em linha com o princípio de responsabilidade única, cada classe de fábrica específica é responsável apenas pela criação de produtos correspondentes
  • Não use métodos de fábrica estáticos, pode formar uma hierarquia com base na herança

Desvantagens:

  • Ao adicionar um novo produto, além de adicionar uma nova categoria de produto, também é necessário fornecer a categoria específica de fábrica correspondente.O número de categorias do sistema aumentará em pares, o que aumenta a complexidade do sistema em certa medida; ao mesmo tempo, existem mais categorias. Necessidade de compilar e executar, trará alguma sobrecarga adicional para o sistema;
  • Considerando a escalabilidade do sistema, é necessário introduzir uma camada de abstração, que é definida no código do cliente, o que aumenta a abstração e a dificuldade de compreensão do sistema, podendo ser necessário o uso de DOM, reflexão e outras tecnologias na implementação. a dificuldade de implementação do sistema.
  • Embora seja garantido que a modificação no método de fábrica seja fechada, para a classe que usa o método de fábrica, se você deseja substituir outro produto, ainda precisa modificar a classe de fábrica de concreto instanciada;
  • Uma fábrica específica pode criar apenas um produto específico

cenas a serem usadas:

  • Quando uma classe não conhece a classe do objeto de que necessita. No padrão do método de fábrica, o cliente não precisa saber o nome da classe da categoria de produto específica, apenas a fábrica correspondente;
  • Quando uma classe deseja especificar a criação de objetos por meio de suas subclasses. No padrão de método de fábrica, a classe de fábrica abstrata só precisa fornecer uma interface para criar um produto, e suas subclasses determinam os objetos específicos a serem criados, usando o polimorfismo orientado a objetos e o princípio da substituição de Liskov, quando o programa está em execução, O objeto da subclasse sobrescreverá o objeto pai, tornando o sistema mais fácil de expandir.
  • A tarefa de criar um objeto é delegada a uma das várias subclasses de fábrica. O cliente não precisa se preocupar com qual subclasse de fábrica criar a subclasse de produto ao usá-la. Ela pode ser especificada dinamicamente quando necessário, e o nome da classe do uma classe de fábrica específica pode ser atribuída Armazenada em um arquivo de configuração ou banco de dados.

Padrão de fábrica abstrato

** Definição: ** Fornece uma interface para criar uma série de objetos relacionados ou interdependentes sem especificar suas classes específicas

Estrutura:
Insira a descrição da imagem aqui
** Vantagens: ** O processo de criação de uma instância de uma classe específica é separado do cliente, o cliente manipula a instância através da interface abstrata da fábrica, e o cliente não sabe quem é a implementação específica.

** Desvantagens: ** Se você adicionar uma nova família de produtos, também precisará modificar a fábrica abstrata e todas as fábricas de concreto.

cenas a serem usadas:

  • Um sistema não depende dos detalhes de como as instâncias de linha de produto são criadas, montadas e expressas.
  • Há mais de uma linha de produtos no sistema e apenas uma delas é usada por vez.
  • Uma linha de produtos (ou um grupo de objetos não relacionados) tem as mesmas restrições.

** Nota: ** Quando há apenas um produto, o modo de fábrica abstrato torna-se o modo de fábrica. Quando os produtos do modo de fábrica tornam-se múltiplos, o modo de fábrica torna-se o modo de fábrica abstrato.

Modo de estratégia

motivação:

  • Freqüentemente, há muitas maneiras diferentes de concluir uma tarefa. Cada forma é chamada de estratégia. Podemos escolher estratégias diferentes para concluir a tarefa de acordo com o ambiente ou as condições.
  • Situações semelhantes são frequentemente encontradas no desenvolvimento de software. Existem várias maneiras de atingir uma determinada função. Neste momento, um padrão de design pode ser usado para permitir que o sistema selecione soluções de maneira flexível, e também é conveniente adicionar novas soluções.

** Definição: ** Defina uma série de algoritmos, encapsule cada algoritmo e torne-os intercambiáveis.

Gráficos UML:

  • Context: De Meio Ambiente
  • Strategy: Classe de estratégia abstrata
  • ConcreteStrategy: Estratégias específicas

Insira a descrição da imagem aqui

Modo de estado

** Definição: ** Permite que um objeto mude seu comportamento quando seu estado interno muda.O objeto parece modificar sua classe. O comportamento de um objeto depende de seu estado, e seu comportamento relacionado pode ser alterado de acordo com suas mudanças de estado.

Gráficos UML:

  • Contexto: classe de ambiente

  • Estado: classe de estado abstrato

  • ConcreteState: classe de estado específica

Insira a descrição da imagem aqui

Modo observador

** Definição: ** Define uma relação de dependência um-para-muitos entre os objetos.Quando o estado de um objeto muda, todos os objetos que dependem dele são notificados e atualizados automaticamente.

Gráficos UML:

Insira a descrição da imagem aqui

Modelo intermediário

** Intento: ** Use um objeto intermediário para encapsular uma série de interações de objetos.O intermediário faz com que os objetos não precisem se referir explicitamente uns aos outros, de forma que o acoplamento é frouxo e a interação entre eles pode ser alterada de forma independente.

** Solução principal: ** Existem muitas associações entre objetos e objetos, o que inevitavelmente fará com que a estrutura do sistema se torne muito complicada. Ao mesmo tempo, se um objeto muda, também precisamos rastrear os objetos associados com ele, e fazer o tratamento adequado.

** Quando usar: ** Várias classes são acopladas entre si para formar uma estrutura de rede.

** Como resolver: ** Separe a estrutura de malha acima em uma estrutura em estrela.

** Implementação: ** Demonstramos o modo intermediário por meio de um exemplo de sala de chat. Em um exemplo, vários usuários podem enviar mensagens para uma sala de chat, e a sala de chat exibe mensagens para todos os usuários. Vamos criar duas classes ChatRoom e User . Objetos de usuário usam o método ChatRoom para compartilhar suas mensagens.

Modo adaptador

** Objetivo: ** converter a interface de uma classe em outra interface desejada pelo cliente. O padrão do adaptador permite que classes que não podem trabalhar juntas devido à incompatibilidade de interface funcionem juntas.

** Solução principal: ** A solução principal é que em sistemas de software, alguns "objetos existentes" são frequentemente colocados em um novo ambiente e as interfaces exigidas pelo novo ambiente não podem ser atendidas pelos objetos existentes.

Modo Ponte

** Intenção: ** Separe a parte abstrata da parte de implementação para que possam ser alteradas independentemente.

** Solução principal: ** Em uma variedade de situações que podem mudar, o uso de herança causará problemas de explosão de classe e não é flexível para expandir.

Modo decorador

** Intenção: ** Para adicionar dinamicamente algumas responsabilidades adicionais a um objeto. Em termos de aumentar a funcionalidade, o padrão do decorador é mais flexível do que gerar subclasses.

** Solução principal: ** Geralmente, costumamos usar herança para estender uma classe. Como a herança introduz características estáticas para a classe, e com o aumento das funções estendidas, a subclasse ficará muito inchada.

** Quando usar: ** Estenda uma classe sem adicionar muitas subclasses.

Insira a descrição da imagem aqui

Modelo de agência

** Definição: ** Em alguns casos, um cliente não deseja ou não pode se referir diretamente a um objeto, neste caso, um terceiro denominado "agente" pode ser utilizado para obter a referência indireta. O objeto proxy pode atuar como um intermediário entre o cliente e o objeto de destino e pode remover conteúdo e serviços que o cliente não pode ver ou adicionar serviços adicionais de que o cliente precisa por meio do objeto proxy.

Gráficos UML:
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/WuLex/article/details/113481748
Recomendado
Clasificación