Modelo intermediario--cooperación de varios departamentos

Cebador

Xiaoshuai trabaja en una empresa de fabricación y su departamento de producción es responsable de la producción de productos. Dado que los productos de su empresa son todos personalizados, todos se producen de acuerdo con las órdenes del departamento de ventas.Durante el proceso de producción, también deben verificar si las materias primas en el almacén son suficientes.

Si las materias primas no son suficientes, se debe notificar al departamento de compras para que compre.Después de la compra, el departamento de compras debe notificar al almacén para que las almacene, y el almacén luego notificará al departamento de producción para que recoja los materiales para la producción.

Una vez completada la producción final, el departamento de producción también notificará al almacén para almacenar el producto terminado.

Todo el proceso de producción implica la cooperación de múltiples departamentos, y las diversas relaciones son complejas. El diagrama de relaciones entre los departamentos es el siguiente:
inserte la descripción de la imagen aquí
Xiaoshuai descubrió que existe un fuerte acoplamiento entre los departamentos, y los objetos de cada departamento deben referirse a los objetos. de muchos otros departamentos Las clases departamentales son difíciles de reutilizar. Entonces, Xiaoshuai le sugirió al jefe que estableciera un departamento de gestión de proyectos para ser responsable de comunicarse con varios departamentos. Cada departamento solo necesita comunicarse con el departamento de gestión de proyectos, para que la relación entre los departamentos sea mucho más clara: el jefe piensa que la propuesta de Xiaoshuai es muy bueno
inserte la descripción de la imagen aquí
, se adoptó la sugerencia de Xiaoshuai y se estableció el departamento de gestión de proyectos para ser responsable de todos los aspectos relacionados con la producción.Por cierto, Xiaoshuai fue ascendido como gerente del departamento de gestión de proyectos, para que pudiera trabajar duro.

Xiaoshuai estaba secretamente encantado, este modelo no es mi original, solo apliqué el modelo mediador.

patrón mediador

Patrón de mediador: use un objeto intermediario para encapsular una serie de interacciones de objetos. Los mediadores permiten que los objetos se acoplen libremente sin hacer referencia explícita entre sí, y sus interacciones se pueden cambiar de forma independiente.

inserte la descripción de la imagen aquí

En pocas palabras, el modo intermediario es: todos los objetos solo conocen al intermediario y solo interactúan con el objeto intermediario.

  • Mediador: El mediador define una interfaz para comunicarse con cada objeto colega (Colega).
  • ConcreteMediator (mediador específico): El mediador específico realiza un comportamiento colaborativo coordinando el objeto de cada colega, y comprende y mantiene a sus colegas.
  • Colega (clase colega): Cada clase colega conoce su objeto mediador y solo se comunica con el objeto mediador.

Los colegas envían y reciben solicitudes al mismo objeto mediador. El mediador reenvía adecuadamente las solicitudes entre varios colegas para lograr un comportamiento colaborativo.

Después de que Xiaoshuai aplicó el modo intermediario, enumeró todos los códigos relacionados con la producción:
clase abstracta de departamento:

/**
 * 部门抽象类
 */
public abstract class Department {
    
    

    /**
     * 中介类
     */
    Mediator mediator;

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

Departamento de Marketing:

/**
 * 市场部门
 */
public class MarketingDepartment extends Department{
    
    

    public MarketingDepartment(Mediator mediator) {
    
    
        super(mediator);
    }

    /**
     * 通知生产
     */
    public void notifyProduction() {
    
    
        super.mediator.notify(this, "开始生产");
    }
}

Departamento de producción:

/**
 * 生产部门
 */
public class ProductionDepartment extends Department{
    
    

    public ProductionDepartment(Mediator mediator) {
    
    
        super(mediator);
    }

    /**
     * 生产产品
     */
    public void production() {
    
    
        System.out.println("生产产品");
    }

    /**
     * 通知采购
     */
    public void notificationPurchase() {
    
    
        super.mediator.notify(this, "通知采购");
    }

    /**
     * 通知入库
     */
    public void notificationStorage() {
    
    
        super.mediator.notify(this, "通知入库");
    }

}

Departamento de compras:

/**
 * 采购部门
 */
public class PurchasingDepartment extends Department{
    
    

    public PurchasingDepartment(Mediator mediator) {
    
    
        super(mediator);
    }

    /**
     * 采购原材料
     */
    public void purchaseRawMaterials() {
    
    
        System.out.println("采购原材料");
    }

    /**
     * 通知入库
     */
    public void notificationStorage() {
    
    
        super.mediator.notify(this, "通知入库");
    }
}

almacén:

/**
 * 仓库
 */
public class Warehouse extends Department{
    
    

    public Warehouse(Mediator mediator) {
    
    
        super(mediator);
    }

    /**
     * 原材料入库
     */
    public void rawMaterialStorage() {
    
    
        System.out.println("原材料入库");
    }

    /**
     * 产成品入库
     */
    public void finishedProductStorage() {
    
    
        System.out.println("产成品入库");
    }

    /**
     * 通知提料
     */
    public void notificationExtractRowMaterials() {
    
    
        super.mediator.notify(this, "通知提料");
    }
}

Interfaz de mediador:

/**
 * 中介者接口
 */
public interface Mediator {
    
    
    /**
     * 通知方法
     * @param department
     * @param event
     */
    void notify(Department department, String event);
}

Departamento de Gestión de Proyectos:

/**
 * 项目管理部
 */
public class ProjectManagementMediator implements Mediator{
    
    

    private MarketingDepartment marketingDepartment;
    private ProductionDepartment productionDepartment;
    private PurchasingDepartment purchasingDepartment;
    private Warehouse warehouse;

    public ProjectManagementMediator() {
    
    
        this.marketingDepartment = new MarketingDepartment(this);
        this.productionDepartment = new ProductionDepartment(this);
        this.purchasingDepartment = new PurchasingDepartment(this);
        this.warehouse = new Warehouse(this);
    }

    @Override
    public void notify(Department department, String event) {
    
    
        // 市场部的通知
        if(department instanceof MarketingDepartment) {
    
    
            this.productionDepartment.production();
        }
        // 生产部的通知
        else if(department instanceof ProductionDepartment) {
    
    
            if("通知采购".equals(event)) {
    
    
                this.purchasingDepartment.purchaseRawMaterials();
            } else if("通知入库".equals(event)) {
    
    
                this.warehouse.finishedProductStorage();
            }
        }
        // 采购部的通知
        else if(department instanceof PurchasingDepartment) {
    
    
            if("通知入库".equals(event)) {
    
    
                this.warehouse.rawMaterialStorage();
            }
        }
        // 仓库的通知
        else if(department instanceof Warehouse) {
    
    
            if("通知提料".equals(event)) {
    
    
                this.productionDepartment.production();
            }
        }
    }
}

cliente:

/**
 * 客户端
 */
public class Client {
    
    

    public static void main(String[] args) {
    
    
        // 项目管理部
        Mediator mediator = new ProjectManagementMediator();
        // 市场部
        MarketingDepartment marketingDepartment = new MarketingDepartment(mediator);
        // 通知生产
        marketingDepartment.notifyProduction();
        // 生产部
        ProductionDepartment productionDepartment = new ProductionDepartment(mediator);
        // 通知采购
        productionDepartment.notificationPurchase();
        // 采购部
        PurchasingDepartment purchasingDepartment = new PurchasingDepartment(mediator);
        // 通知入库
        purchasingDepartment.notificationStorage();
        // 仓库
        Warehouse warehouse = new Warehouse(mediator);
        // 通知提料
        warehouse.notificationExtractRowMaterials();
        // 生产部通知入库
        productionDepartment.notificationStorage();
    }
}

producción:

生产产品
采购原材料
原材料入库
生产产品
产成品入库

De esta manera, todos los departamentos solo necesitan enviar sus necesidades al departamento de gestión de proyectos y dejar que el departamento de gestión de proyectos actúe como intermediario para comunicarse con otros departamentos para una gestión unificada y una planificación general, lo que puede mejorar en gran medida la eficiencia de la producción.

Resumir

Diferencia entre patrones de mediador y observador

El objetivo principal de un mediador es eliminar las interdependencias entre una serie de objetos que dependerían del mismo objeto mediador.

El objetivo del observador es establecer una conexión dinámica unidireccional entre los objetos. La relación de interacción entre ellos suele ser unidireccional. Un participante es un observador o una persona observada, y no tendrá ambas identidades.

Lo más importante es que sus intenciones son diferentes, el intermediario es principalmente para eliminar las dependencias entre objetos, y el modo observador es un mecanismo de suscripción, que es principalmente para enviar notificaciones a los objetos suscritos.

Tenemos que distinguir diferentes patrones de diseño, lo mejor es empezar por sus intenciones, diferentes patrones de diseño pueden ser muy similares, pero los problemas que tienen que resolver son diferentes.

Finalmente, echemos un vistazo a las ventajas y desventajas del modelo de mediador:

ventaja

  • La generación de subclases se reduce y Mediator organiza el comportamiento de los objetos Colega juntos. Si desea cambiar el modo de comportamiento de los objetos Colega, solo necesita agregar una subclase de Mediador, y cada clase Colega se puede reutilizar.
  • Al desacoplar cada objeto Colega, todos los objetos Colega no están relacionados, podemos cambiar y reutilizar cada clase Mediador y clase Colega de forma independiente.
  • La relación entre objetos se simplifica y la relación original de muchos a muchos se cambia a una relación de uno a muchos entre los objetos Mediador y Colega.

defecto

  • El patrón del mediador transforma la complejidad de la interacción en la complejidad del mediador, y el objeto del mediador puede volverse cada vez más complejo y difícil de mantener.

Supongo que te gusta

Origin blog.csdn.net/zhanyd/article/details/119673741
Recomendado
Clasificación