Patrones de diseño Notas del patrón mediador

ilustrar

Registre el método de escritura para aprender el patrón de diseño-patrón mediador. La versión de JDK utilizada es la versión 1.8.

Mediador

Intención : utilizar un objeto mediador para encapsular una serie de interacciones de objetos. Los mediadores eliminan la necesidad de que los objetos hagan referencia explícita entre sí, por lo que están débilmente acoplados y pueden cambiar sus interacciones de forma independiente.
Estructura :
Insertar descripción de la imagen aquí

en:

  • Mediador define una interfaz para la comunicación entre objetos Colleague.
  • ConcreteMediator (mediador concreto) logra un comportamiento colaborativo coordinando el objeto de cada colega; comprende y mantiene a sus colegas.
  • ConcreteSubject (objetivo específico) almacena el estado relevante en cada objeto ConcreteObserver; cuando su estado cambia, envía una notificación a cada uno de sus observadores.
  • Una clase Colega conoce sus objetos mediadores; cada objeto de clase Colega se comunica con su mediador cuando necesita comunicarse con otros colegas.

aplicabilidad:

  • Un conjunto de objetos se comunica de una manera bien definida pero compleja, lo que da como resultado interdependencias estructuradas de manera confusa y difíciles de entender.
  • Un objeto hace referencia a muchos otros objetos y se comunica directamente con estos objetos, lo que dificulta la reutilización del objeto.
  • Quiero personalizar un comportamiento que se distribuye entre varias clases sin generar demasiadas subclases.

Tabla de contenido

Insertar descripción de la imagen aquí

Diagrama de clases de ejemplo de patrón mediador

Insertar descripción de la imagen aquí
Utilice este diagrama de clases UML para implementar el ejemplo del patrón mediador.

clase mediadora abstracta

package com.example.deesign_patterns.mediator;

//抽象中介者类
public abstract class Mediator {
    
    

    //联系方法
    public abstract void contact(String message,Person person);
}

clase de colega abstracta

package com.example.deesign_patterns.mediator;

//抽象同事类
public abstract class Person {
    
    

    protected String name;
    protected Mediator mediator;

    public Person(String name, Mediator mediator) {
    
    
        this.name = name;
        this.mediator = mediator;
    }
}

Inquilinos

package com.example.deesign_patterns.mediator;

//租房者类,具体的同事角色类
public class Tenant extends Person{
    
    

    public Tenant(String name, Mediator mediator) {
    
    
        super(name, mediator);
    }

    //和中介联系(沟通)的方法
    public void contact(String message){
    
    
        mediator.contact(message,this);
    }

    //获取信息的方法
    public void getMessage(String message){
    
    
        System.out.println("租房者"+name+"获取到的信息是:"+message);
    }
}

Dueño de casa

package com.example.deesign_patterns.mediator;

//房主类,具体的同事角色类
public class HouseOwner extends Person{
    
    

    public HouseOwner(String name, Mediator mediator) {
    
    
        super(name, mediator);
    }

    //和中介联系(沟通)的方法
    public void contact(String message){
    
    
        mediator.contact(message,this);
    }

    //获取信息的方法
    public void getMessage(String message){
    
    
        System.out.println("房主"+name+"获取到的信息是:"+message);
    }
}

Clases de roles de mediador específicos

package com.example.deesign_patterns.mediator;

//具体的中介者角色类
public class MediatorStructure extends Mediator{
    
    

    //聚合租房者和房主对象
    private Tenant tenant;
    private HouseOwner houseOwner;

    public Tenant getTenant() {
    
    
        return tenant;
    }

    public void setTenant(Tenant tenant) {
    
    
        this.tenant = tenant;
    }

    public HouseOwner getHouseOwner() {
    
    
        return houseOwner;
    }

    public void setHouseOwner(HouseOwner houseOwner) {
    
    
        this.houseOwner = houseOwner;
    }

    @Override
    public void contact(String message, Person person) {
    
    
        if(person==houseOwner){
    
    
            tenant.getMessage(message);
        }else {
    
    
            houseOwner.getMessage(message);
        }
    }
}

clase de prueba

package com.example.deesign_patterns.mediator;

//测试类
public class Client {
    
    

    public static void main(String[] args) {
    
    
        //创建中介者对象
        MediatorStructure mediator=new MediatorStructure();
        //创建租房者对象
        Tenant tenant=new Tenant("李四",mediator);
        //创建房主对象
        HouseOwner houseOwner=new HouseOwner("张三",mediator);
        //中介者要知道具体的房主和租房者
        mediator.setTenant(tenant);
        mediator.setHouseOwner(houseOwner);
        tenant.contact("我要租三室的房子!!!");
        houseOwner.contact("我这里有三室的房子,你要租吗?");
    }
}

Insertar descripción de la imagen aquí

beneficio:

  • Débilmente acoplado. El patrón mediador encapsula las interacciones entre múltiples objetos colegas en el objeto mediador, acoplando así de manera flexible los objetos colegas y básicamente logrando una dependencia complementaria. De esta manera, los objetos de los compañeros se pueden cambiar y reutilizar de forma independiente, en lugar de "mover un lugar y afectar a todo el cuerpo" como antes.
  • Controlar centralmente las interacciones. La interacción de múltiples objetos de colegas se encapsula en el objeto mediador para la administración centralizada, de modo que cuando estos comportamientos interactivos cambian, solo necesita modificar el objeto mediador. Por supuesto, si es un sistema ya completo, luego extienda el objeto mediador. y no es necesario modificar cada clase de colega.
  • Una asociación uno a muchos se convierte en una asociación uno a uno. Cuando no se utiliza el patrón mediador, la relación entre los objetos colega suele ser de uno a muchos. Después de introducir el objeto mediador, la relación entre el objeto mediador y el objeto colega generalmente se convierte en una relación bidireccional uno a uno. , lo que hace que la relación entre los objetos sea más fácil de entender e implementar.

defecto:

  • Cuando hay demasiadas coclases, las responsabilidades del mediador serán enormes y se volverán complejas y grandes, lo que hará que el sistema sea difícil de mantener.

Supongo que te gusta

Origin blog.csdn.net/weixin_48040732/article/details/131363754
Recomendado
Clasificación