Padrão mediador - coordena as interações entre vários objetos

1. Introdução

1.1 Visão geral

Se o relacionamento entre os objetos de um sistema apresentar uma estrutura de rede, como mostra a figura a seguir:
insira a descrição da imagem aqui
há um grande número de relacionamentos muitos-para-muitos entre os objetos, o que levará a um sistema muito complexo. Esses objetos não afetarão apenas outros objetos, mas também são afetados Influenciados por outros objetos, esses objetos são chamados de objetos colegas e percebem o comportamento do sistema por meio da interação uns com os outros. Em uma estrutura de rede, quase todo objeto precisa interagir com outros objetos, e essa interação aparece como um acoplamento direto de um objeto a outro objeto, o que levará a um sistema superacoplado.

O padrão Mediator pode reduzir drasticamente o número de relacionamentos entre objetos. Ao introduzir um objeto mediador, a estrutura de rede do sistema pode ser transformada em uma estrutura em estrela centrada no mediador, como mostra a figura a seguir:
insira a descrição da imagem aqui
Nesta estrutura em estrela, o objeto colega não está mais conectado diretamente com outro objeto, ele passa Um objeto mediador interage com outro objeto. A existência do objeto intermediário garante a estabilidade da estrutura do objeto, ou seja, a estrutura do sistema não trará muito trabalho de modificação devido à introdução de novos objetos.

Se houver um relacionamento muitos-para-muitos entre objetos em um sistema, alguns comportamentos interativos entre os objetos podem ser separados de cada objeto e encapsulados em um objeto intermediário, e o intermediário realizará uma coordenação unificada. -muitos relacionamento complexo entre objetos é transformado em um relacionamento um-para-muitos relativamente simples. Ao introduzir intermediários para simplificar interações complexas entre objetos, o padrão intermediário é uma aplicação típica da lei de Deméter.

1.2. Definição

Padrão Mediador: Use um objeto mediador (mediador) para encapsular uma série de interações de objetos. Os mediadores eliminam a necessidade de os objetos se referirem explicitamente uns aos outros, tornando-os fracamente acoplados, e suas interações podem ser alteradas independentemente. O modo mediador, também conhecido como modo mediador, é um modo comportamental de objeto.

2. Análise

2.1, diagrama de classe UML

No modo intermediário, é introduzida a classe intermediária usada para coordenar chamadas mútuas entre outros objetos/classes. Para tornar o sistema mais flexível e escalável, geralmente é fornecido um intermediário abstrato, cujo diagrama de estrutura é mostrado na figura abaixo.
insira a descrição da imagem aqui
As quatro funções a seguir estão incluídas no diagrama de estrutura do modelo intermediário:

  1. Mediador (mediador abstrato): Define uma interface, que é utilizada para se comunicar com cada objeto colega.
  2. ConcreteMediator (mediador concreto): É uma subclasse do mediador abstrato, que realiza o comportamento colaborativo coordenando cada objeto colega e mantém uma referência para cada objeto colega.
  3. Colega (classe abstrata de colega): define os métodos públicos de cada classe colega e declara alguns métodos abstratos para as subclasses implementarem e mantém uma referência à classe intermediária abstrata por meio da qual as subclasses podem se comunicar com o intermediário ou comunicação.
  4. ConcreteColleague (classe colega concreta): É uma subclasse da classe abstrata colega. Quando cada objeto colega precisa se comunicar com outros objetos colegas, ele primeiro se comunica com o intermediário e indiretamente completa a comunicação com outras classes colegas por meio do intermediário. Um método abstrato declarado em uma classe colega abstrata é implementado em uma classe colega concreta.

O núcleo do padrão mediator é a introdução da classe mediator. No modelo intermediário, a classe intermediária assume as duas responsabilidades a seguir:
(1) Papel de transição (estrutural). Por meio da função de retransmissão fornecida pelo mediador, cada objeto colega não precisa mais se referir explicitamente a outros colegas. Quando é necessário comunicar com outros colegas, pode ser implementada uma chamada indireta através de um mediador. Este papel de transferência pertence ao suporte estrutural do intermediário.
(2) Coordenação (comportamental). O intermediário pode encapsular ainda mais o relacionamento entre colegas, e os colegas podem interagir com o intermediário de maneira consistente, sem especificar o que o intermediário precisa fazer. O intermediário processa ainda os pedidos dos colegas de acordo com a lógica de coordenação encapsulada em si, e separa e encapsula os comportamentos de relacionamento entre colegas. Este papel de coordenação pertence ao suporte do mediador no comportamento.

2.2. Exemplo de código

No modo intermediário, um típico código abstrato de classe intermediária é o seguinte:

/**
 * @Description: 抽象中介者
 * @Author: yangyongbing
 * @CreateTime: 2023/08/03  08:56
 * @Version: 1.0
 */
public class Mediator {
    
    

    // 存储同事对象
    protected ArrayList<Colleague> colleagues;

    // 注册方法,用于增加同事对象
    public void register(Colleague colleague){
    
    
        colleagues.add(colleague);
    }

    // 声明抽象的业务方法
    public void operation() {
    
    

    }
}

Uma coleção de classes de colegas pode ser definida no intermediário abstrato, que é usado para armazenar objetos de colegas e fornecer métodos de registro e, ao mesmo tempo, declarar os métodos da classe intermediária concreta. Esses métodos abstratos serão implementados na classe intermediária concreta, e o código típico da classe intermediária concreta é o seguinte:

/**
 * @Description: 具体中介者
 * @Author: yangyongbing
 * @CreateTime: 2023/08/03  08:58
 * @Version: 1.0
 */
public class ConcreteMediator extends Mediator{
    
    
    // 实现业务方法,封装同事之间的调用
    public void operation(){
    
    
        // 通过中介者调用同事类的方法
        colleagues.get(0).method();
    }
}

Na classe intermediária específica, o método da classe colega será chamado, e alguns códigos de negócios próprios podem ser adicionados para controlar a chamada na chamada.

Uma referência ao mediador abstrato é mantida na classe colega abstrata, que é usada para chamar o método do mediador. Um típico código abstrato de classe de colega é o seguinte:

/**
 * @Description: 抽象同事类
 * @Author: yangyongbing
 * @CreateTime: 2023/08/03  09:02
 * @Version: 1.0
 */
public class Colleague {
    
    
    // 维持一个抽象中介者的引用
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
    
    
        this.mediator = mediator;
    }

    // 声明自身方法,处理自己的行为
    public void method() {
    
    

    }

    // 定义依赖方法,与中介者进行通信
    public void dependencyMethod(){
    
    
       mediator.operation();
    }
}

Os métodos abstratos da classe colega são declarados na classe abstrata colega e esses métodos serão implementados na classe concreta colega. Um típico código de classe de colega específico é o seguinte:

/**
 * @Description: 具体同事类
 * @Author: yangyongbing
 * @CreateTime: 2023/08/03  09:06
 * @Version: 1.0
 */
public class ConcreteColleague extends Colleague{
    
    
    public ConcreteColleague(Mediator mediator) {
    
    
        super(mediator);
    }

    // 实现自身方法
    public void method(){
    
    

    }
}

O método declarado na classe abstrata do colega é implementado na classe concreta do colega ConcreteColleague. O método method() é o auto-método (Self-Method) da classe colega, que é utilizado para lidar com seu próprio comportamento. O método dependencyMethod() é um método dependente (Depend-Method), que é usado para chamar o método definido no intermediário e contar com o intermediário para completar o comportamento correspondente, como chamar um método relacionado de outra classe colega.

3. Resumo do modelo intermediário

O padrão Mediator transforma uma estrutura de sistema de malha em uma estrutura em estrela centrada no objeto Mediator. Nessa estrutura em estrela, o relacionamento muitos-para-muitos entre os objetos originais é substituído pelo relacionamento um-para-muitos entre o objeto mediador e outros objetos. O modelo intermediário é amplamente utilizado em software orientado a eventos, especialmente software de aplicativo baseado em GUI. Além disso, o padrão mediador tem sido bem aplicado em sistemas com associações intrincadas entre classes.

3.1. Principais vantagens

  1. O padrão do mediador simplifica a interação entre objetos, substituindo a interação muitos-para-muitos original entre colegas pela interação um-para-muitos entre o mediador e os colegas. Relacionamentos um-para-muitos são mais fáceis de entender, manter e estender, transformando uma estrutura de malha incompreensível em uma estrutura em estrela relativamente simples.
  2. O padrão mediador desacopla cada objeto colega. O intermediário é favorável ao acoplamento frouxo entre os colegas, e cada colega e intermediário pode ser alterado e reutilizado independentemente. É mais conveniente adicionar novos intermediários e novos colegas e está em conformidade com o princípio de abertura e fechamento.
  3. Pode reduzir a geração de um grande número de subclasses de colegas. O intermediário reúne os comportamentos que foram originalmente distribuídos entre vários objetos, e a mudança desses comportamentos só precisa gerar uma nova subclasse intermediária, o que faz com que cada classe colega possa ser reutilizada sem estender a classe colega.

3.2 Principais desvantagens

A principal desvantagem do modelo intermediário é que um grande número de detalhes de interação entre colegas é incluído na classe intermediária específica, o que pode tornar a classe intermediária específica muito complicada e dificultar a manutenção do sistema.

3.3. Cenários aplicáveis

  1. Existem relações de referência complexas entre objetos no sistema, e a estrutura do sistema é confusa e difícil de entender.
  2. Um objeto é difícil de reutilizar porque se refere a muitos outros objetos e se comunica diretamente com esses objetos.
  3. Quero encapsular o comportamento de várias classes por meio de uma classe intermediária, mas não quero gerar muitas subclasses. Isso pode ser realizado introduzindo uma classe mediadora, definindo o comportamento público da interação do objeto no mediador e adicionando uma nova classe mediadora específica se o comportamento precisar ser alterado.

Acho que você gosta

Origin blog.csdn.net/YYBDESHIJIE/article/details/132073798
Recomendado
Clasificación