Patrones de diseño: ejemplo de uso de patrón intermedio en Java: gestión de información del cliente

Escenas

Para desarrollar la interfaz de la ventana de gestión de información del cliente, existe una interacción relativamente compleja entre los componentes de la interfaz: si se elimina un cliente,

Para eliminar el elemento correspondiente en la lista de clientes (List), el nombre del cliente en el cuadro combinado de selección de clientes (ComboBox) también se reducirá en uno;

Si agrega información de un cliente, deberá agregar un cliente a la lista de clientes y también se agregará un artículo en el cuadro combinado.

Descripción general del patrón mediador

Si la conexión entre objetos en un sistema se presenta como una estructura de red. Hay una gran cantidad de relaciones de muchos a muchos entre objetos, lo que hará que el sistema sea muy complejo.

Estos objetos afectarán a otros objetos y serán afectados por otros objetos. Estos objetos se denominan objetos colegas e interactúan entre sí.

implementar el comportamiento del sistema. En una estructura de malla, casi todos los objetos necesitan interactuar con otros objetos, y esta interacción se manifiesta como una

El acoplamiento directo de un objeto a otro objeto, lo que da como resultado un sistema sobreacoplado.

El patrón mediador puede reducir drásticamente el número de relaciones entre objetos. Al introducir objetos mediadores, la estructura de red del sistema se puede transformar en un mediador.

Estructura de estrella centrada. En esta estructura en estrella, el objeto colega ya no está conectado directamente con otro objeto, sino con el objeto intermediario.

Otro objeto interactúa. La existencia del objeto intermediario asegura la estabilidad de la estructura del objeto, es decir, la estructura del sistema no se verá afectada por

La introducción de nuevos objetos conlleva mucho trabajo de modificación.

Diagrama de estructura del modelo intermediario.

 

Los siguientes roles están incluidos en el diagrama de estructura del modelo intermediario:

Mediador (mediador abstracto):

Define una interfaz que se utiliza para comunicarse con cada objeto colega.

ConcreteMediator (mediador específico):

Es una subclase de intermediario abstracto, que realiza un comportamiento cooperativo coordinando varios objetos colegas y mantiene referencias a cada objeto colega.

Colega (clase de colega abstracta):

Define los métodos públicos de cada clase colega y declara algunos métodos abstractos para que los implementen las subclases. Al mismo tiempo, mantiene una referencia a la clase intermediaria abstracta.

Una referencia a qué subclases pueden utilizar para comunicarse con el mediador.

ConcreteColleague (clase de colega concreta):

Es una subclase de la clase colega abstracta; cuando cada objeto colega necesita comunicarse con otros objetos colega, primero se comunica con el intermediario,

La comunicación con otras clases de colegas se completa indirectamente a través del intermediario; el método abstracto declarado en la clase de colegas abstracta se implementa en la clase de colegas concreta.

Nota:

Blog:
Domineering Rogue Temperament_C#, Architecture Road, Blog SpringBoot-CSDN

lograr

Implementar la página de gestión de información del cliente utilizando el patrón intermediario.

1. Crea un nuevo intermediario abstracto.

//抽象中介者
abstract class Mediator {
    public abstract void componentChanged(Component component);
}

2. Luego cree un intermediario específico para mantener las referencias a cada objeto colega.

//具体中介者
public class ConcreteMediator extends Mediator{

    //维持对各个同事对象的引用
    public Button addButton;
    public UserList userList;
    public TextBox userNameTextBox;
    public ComboBox cb;

    @Override
    public void componentChanged(Component c) {
        //单击按钮
        if(c == addButton){
            System.out.println("单击增加按钮");
            userList.update();
            cb.update();
            userNameTextBox.update();
        }else if(c == userList){
            System.out.println("从列表框选择客户");
            cb.select();
            userNameTextBox.setText();
        }else if(c == cb){
            System.out.println("从组合框选择客户");
            cb.select();
            userNameTextBox.setText();
        }
    }
}

3. Cree una nueva clase de componente abstracto: clase de colega abstracta

//抽象组件类:抽象同事类
abstract class Component {
    protected Mediator mediator;

    public void setMediator(Mediator mediator){
        this.mediator = mediator;
    }

    //转发调用
    public void changed(){
        mediator.componentChanged(this);
    }

    public abstract void update();
}

4. Cree una nueva clase de colega específica: clase de botón

//按钮类:具体同事类
public class Button extends Component{

    public void update() {
        System.out.println("列表增加一项");
    }

    public void select(){
        System.out.println("列表框选中项");
    }
}

5. Cree una nueva clase de colega específica: clase de cuadro combinado

//组合框类:具体同事类
public class ComboBox extends Component{

    public void update() {
        System.out.println("组合框增加一项");
    }
    public void select(){
        System.out.println("组合框选中项");
    }
}

6. Cree una nueva clase de colega específica: clase de cuadro de texto

//文本框类:具体同事类
public class TextBox extends Component{

    public void update() {
        System.out.println("客户信息增加成功后文本框清空");
    }

    public void setText(){
        System.out.println("文本框显示");
    }
}

7. Cree una nueva clase de colega específica: clase de cuadro de lista

//列表框类:具体同事类
public class UserList extends Component{


    public void update() {
        System.out.println("列表框增加一项");
    }

    public void select(){
        System.out.println("列表框选中项");
    }
}

8. El método de llamada del cliente es el siguiente

public class Client {
    public static void main(String[] args) {
        //定义中介者对象
        ConcreteMediator mediator;
        mediator = new ConcreteMediator();

        //定义同事对象
        Button addBT = new Button();
        UserList userList = new UserList();
        ComboBox cb = new ComboBox();
        TextBox userNameTB = new TextBox();

        addBT.setMediator(mediator);
        userList.setMediator(mediator);
        cb.setMediator(mediator);
        userNameTB.setMediator(mediator);

        mediator.addButton = addBT;
        mediator.userList = userList;
        mediator.cb = cb;
        mediator.userNameTextBox = userNameTB;

        addBT.changed();
        userList.changed();

    }
}

9. Resumen

El patrón mediador convierte una estructura de sistema en red en una estructura en estrella centrada en el objeto mediador. En esta estructura en estrella,

Utilice una relación de uno a muchos entre los objetos mediadores y otros objetos para reemplazar la relación de muchos a muchos entre los objetos originales.

El modo intermediario se usa ampliamente en software controlado por eventos, especialmente basado en GUI (interfaz gráfica de usuario, interfaz gráfica de usuario)

Además, el modelo intermediario se puede aplicar bien en sistemas con asociaciones complejas entre clases.

Las principales ventajas del patrón mediador son las siguientes:

(1) El modo intermediario simplifica la interacción entre objetos y reemplaza la interacción original de muchos a muchos entre colegas por la interacción de uno a muchos entre intermediarios y colegas.

Las relaciones de uno a muchos son más fáciles de entender, mantener y ampliar, transformando una estructura de malla que de otro modo sería incomprensible en una estructura en estrella relativamente simple.

(2) El patrón mediador puede desacoplar cada objeto colega. El intermediario favorece un acoplamiento flojo entre colegas, podemos cambiarlo y reutilizarlo de forma independiente

Para cada colega e intermediario, es más conveniente agregar un nuevo intermediario y una nueva clase de colegas, que se ajuste mejor al "principio de apertura y cierre".

(3) Puede reducir la generación de subclases. El intermediario reúne los comportamientos que originalmente se distribuyeron entre múltiples objetos. Para cambiar estos comportamientos, solo es necesario generar otros nuevos.

La subclase intermedia es suficiente, lo que hace que cada clase de colega sea reutilizable sin extender la clase de colega.

Las principales desventajas del modelo mediador son las siguientes:

Una gran cantidad de detalles de interacción entre colegas se incluyen en la clase intermediaria específica, lo que puede hacer que la clase intermediaria específica sea muy complicada y dificultar el mantenimiento del sistema.

El patrón mediador se puede considerar en las siguientes situaciones:

(1) Existen relaciones de referencia complejas entre los objetos del sistema y la estructura del sistema es confusa y difícil de entender.

(2) Un objeto es difícil de reutilizar porque hace referencia a muchos otros objetos y se comunica directamente con estos objetos.

(3) Quiero encapsular el comportamiento de varias clases a través de una clase intermedia, pero no quiero generar demasiadas subclases. Puede presentar una clase de mediador para

Tenga en cuenta que defina el comportamiento público de la interacción de objetos en el mediador. Si necesita cambiar el comportamiento, puede agregar una nueva clase de mediador específica.

Supongo que te gusta

Origin blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131991798
Recomendado
Clasificación