Observando el patrón de diseño de Java desde la entrada de China en la OMC: el patrón intermedio

Escenarios de aplicación

  • Existen relaciones de referencia relativamente complicadas entre los objetos en el sistema, lo que conduce a una estructura de relación de dependencia caótica entre ellos y es difícil reutilizar el objeto.
  • Quiere encapsular el comportamiento en varias clases a través de una clase intermedia, pero no quiere generar demasiadas subclases

Modelo intermediario

definición

Envuelve la forma en que interactúan una serie de objetos, de modo que estos objetos no tienen que referirse entre sí de manera obvia, lo que los hace relativamente poco acoplados.

Principio de diseño: ley de Dimit

intención

Use un objeto intermediario para encapsular una serie de interacciones de objetos, el intermediario hace que estos objetos no tengan que referirse entre sí de manera obvia, lo que los hace relativamente poco acoplados y puede cambiar de forma independiente la interacción entre ellos

Principalmente resuelve el problema

Hay muchas asociaciones entre los objetos del sistema, lo que hará que la estructura del sistema se vuelva complicada. Si un objeto cambia, debe rastrear los objetos asociados con él.

Cuándo usar

Varias clases se acoplan entre sí para formar una estructura de red, y la estructura de red debe convertirse en una estructura en estrella.

Estructura de la red:
Inserte la descripción de la imagen aquí
estos objetos afectarán a otros objetos y se verán afectados por otros objetos, por lo que a menudo se les llama objetos colega.Como se puede ver en la figura, casi todos los objetos interactúan con otros objetos.Este es un sistema acoplado excesivo.

Estructura en estrella:
Inserte la descripción de la imagen aquí
Al introducir el objeto intermediario, la estructura de red del sistema se puede convertir en una estructura en estrella. Se puede ver que los objetos colega ya no tienen contacto directo con otros objetos, y se garantiza la existencia del objeto intermediario. La estructura del objeto es estable, es decir, el sistema no causará mucho trabajo de modificación debido a la introducción de nuevos objetos.

Pros y contras

ventaja:

  • Reducir la complejidad de la clase, transformar uno a varios en uno a uno
  • Desacoplamiento entre clases
  • De acuerdo con los principios de diseño: Ley de Dimit

Desventajas:

  • Aumentó la complejidad de la clase intermedia.

Diagrama de estructura:
Inserte la descripción de la imagen aquí
Roles involucrados:

  • Función de mediador abstracto (Mediator): define la interfaz del objeto colega al objeto mediador. El método principal es uno o más métodos de evento. Esta función generalmente se implementa mediante una clase abstracta de Java o un objeto de Java
  • Rol de ConcreteMediator: Implementa el método de evento declarado por el rol de mediador abstracto. El rol de mediador concreto conoce todas las clases de colega específicas. Recibe mensajes de clases de colega específicas y emite comandos a objetos de colega específicos. Implementación de clase de Java específica
  • Rol de clase de colega abstracto (colega): define la interfaz del intermediario al objeto colega, el objeto colega solo conoce al intermediario pero no a otros objetos colega
  • Rol del colega concreto: cada colega concreto conoce su propio comportamiento en un rango pequeño, pero no conoce su propósito en un rango grande.

El código fuente correspondiente es el siguiente:

public abstract class Mediator {
    
    

    /** 事件方法,由子类实现 */
    public abstract void colleagueChanged(Colleague colleague);

    public static void main(String[] args) {
    
    
        ConcreteMediator mediator = new ConcreteMediator();
        mediator.create();
        Colleague colleague1 = new Colleague1(mediator);
        Colleague colleague2 = new Colleague2(mediator);
        mediator.colleagueChanged(colleague1);
    }
}
public class ConcreteMediator extends Mediator {
    
    

    private Colleague1 colleague1;

    private Colleague2 colleague2;

    @Override
    public void colleagueChanged(Colleague colleague) {
    
    
        colleague1.action();
        colleague2.action();
    }

    /** 创建同事对象 */
    public void create() {
    
    
        colleague1 = new Colleague1(this);
        colleague2 = new Colleague2(this);
    }

    /** 提供同事对象 */
    public Colleague1 getColleague1() {
    
    
        return colleague1;
    }

    /** 提供同事对象 */
    public Colleague2 getColleague2() {
    
    
        return colleague2;
    }
}
public abstract class Colleague {
    
    

    private Mediator mediator;

    /** 参量:中介者对象 */
    public Colleague(Mediator mediator) {
    
    
        this.mediator = mediator;
    }

    /** 取值方法 */
    public Mediator getMediator() {
    
    
        return mediator;
    }

    /** 行动方法,由子类实现 */
    public abstract void action();

    /** 可以改变对象的内部状态 */
    public void change() {
    
    
        mediator.colleagueChanged(this);
    }
}
public class ConcreteColleague extends Colleague {
    
    
    /**
     * 参量:中介者对象
     *
     * @param mediator
     */
    public ConcreteColleague(Mediator mediator) {
    
    
        super(mediator);
    }

    @Override
    public void action() {
    
    
        System.out.println("实现了行动方法");
    }
}

Organización Mundial del Comercio OMT

La Organización Mundial del Comercio (Inglés: Organización Mundial del Comercio), conocida como la Organización Mundial del Comercio (OMC), es una organización internacional permanente independiente de las Naciones Unidas. La función de la Organización Mundial del Comercio es mediar en las disputas. La adhesión a la OMC no cuenta como la firma de un acuerdo comercial multilateral. Es la base organizativa y jurídica del sistema comercial, el administrador de numerosos acuerdos comerciales, el supervisor de la legislación comercial de cada miembro y el lugar para la solución de controversias y la negociación comercial. Por
ejemplo, cuando no hay OMC, el relación entre varios países El intercambio comercial es así:
Inserte la descripción de la imagen aquí
Después de la OMC, el intercambio comercial se ha convertido como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Escena pequeña:

Los tres países de China, Francia y Corea del Sur deben comerciar a través de la OMC. El té chino debe exportarse a Francia y Corea del Sur, el foie gras francés debe exportarse a China y Corea del Sur, y el kimchi coreano debe exportarse a China y Francia.

La organización de la OMC, el intermediario abstracto:
define dos interfaces, la adhesión a la OMC y los intercambios comerciales:

public interface WTOMediator {
    
    

    /** 加入WTO */
     void addWTO(Countries countries);

    /** 贸易往来 */
    void trade(Countries countries);
}

El intermediario específico implementa la interfaz anterior y define cómo unirse a la OMC y cómo realizar transacciones comerciales:

public class ConcreteWTOMediator implements WTOMediator {
    
    

    private List<Countries> countriesList = new ArrayList<>();

    @Override
    public void addWTO(Countries countries) {
    
    
        if (!countriesList.contains(countries)) {
    
    
            countries.setWtoMediator(this);
            this.countriesList.add(countries);
        }

    }

    @Override
    public void trade(Countries countries) {
    
    
        countriesList.forEach(v -> {
    
    
            if(!v.equals(countries)) {
    
    
                v.receive();
            }
        });

    }
}

Categoría colega abstracto, conoce la existencia de la OMC, pero desconoce la existencia de otros países:

public abstract class Countries {
    
    

    public WTOMediator wtoMediator;

    /** 贸易进口 */
    public abstract void receive();

    /** 贸易出口 */
    public abstract void send();

    public void setWtoMediator(WTOMediator wtoMediator) {
    
    
        this.wtoMediator = wtoMediator;
    }
}

China, Francia y Corea del Sur deben implementar la interfaz anterior:

public class China extends Countries {
    
    

    @Override
    public void receive() {
    
    
        System.out.println("贸易出口到中国");
    }

    @Override
    public void send() {
    
    
        System.out.println("中国茶叶出口了!");
        this.wtoMediator.trade(this);
    }
}
public class French extends Countries {
    
    

    @Override
    public void receive() {
    
    
        System.out.println("贸易出口到法国");
    }

    @Override
    public void send() {
    
    
        System.out.println("法国鹅肝出口了!");
        this.wtoMediator.trade(this);
    }
}
public class Korea extends Countries {
    
    

    @Override
    public void receive() {
    
    
        System.out.println("贸易出口到韩国");
    }

    @Override
    public void send() {
    
    
        System.out.println("韩国泡菜出口了!");
        this.wtoMediator.trade(this);
    }
}

La siguiente es la categoría de prueba, es decir, se inicia la transacción comercial:

public class Test {
    
    
    public static void main(String[] args) {
    
    
        //构建WTO中介者
        WTOMediator mediator = new ConcreteWTOMediator();

        //构建具体的同事类,即各个国家
        Countries china = new China();
        Countries french = new French();
        Countries korea = new Korea();

        //加入WTO
        mediator.addWTO(china);
        mediator.addWTO(french);
        mediator.addWTO(korea);

        china.send();
        System.out.println();
        french.send();
        System.out.println();
        korea.send();
    }
}

Inserte la descripción de la imagen aquí
Diagrama de clases:
Inserte la descripción de la imagen aquí
Nota:

  • El modelo intermediario no debe utilizarse cuando la división de responsabilidades es caótica
  • No se debe utilizar para clases de datos y clases de métodos.
  • Necesita comprender la encapsulación correctamente

Patrones de diseño relacionados con el patrón intermedio:

  • Modo de apariencia
  • Modo de observador
  • Modo adaptador

Después de leer los cuatro modos anteriores, piense en las similitudes y diferencias.

Supongo que te gusta

Origin blog.csdn.net/qq_34365173/article/details/108159333
Recomendado
Clasificación