Reaprendizaje de patrones de diseño (3. Patrones de diseño-patrón intermediario)

1. Modo intermediario

    Para el intermediario lo más común que se escucha es el intermediario inmobiliario, el deber del intermediario inmobiliario es muy sencillo, es decir tender un puente entre la compra y venta de una casa para comunicar las dos, este es el modelo de intermediario que vamos a aprender hoy.

1.1, que es el modelo intermediario

  • definición

    El modo mediador , también conocido como modo de mediación, es un modo de diseño de comportamiento. El mediador hace que cada objeto no necesite mostrar referencias mutuas, pero hace que los componentes del programa se comuniquen indirectamente a través de un objeto mediador especial, lo que reduce el acoplamiento entre los componentes del programa. Es una aplicación típica de la ley de Dimiter.

    Este patrón restringe la comunicación directa entre objetos y los obliga a cooperar solo a través de objetos intermediarios, similar a la parte del controlador del patrón MVC, el controlador (C) es el intermediario entre el modelo (M) y la vista (V).

La estructura del patrón Mediator:

    1) El papel de mediador abstracto (Mediador): es la interfaz del mediador, que proporciona un método abstracto para registrar y reenviar la información de los objetos colega.

    2) Rol de mediador concreto: implemente la interfaz de mediador, defina una lista para administrar objetos de colega y coordine la interacción entre cada rol de colega, por lo que depende del rol de colega.

    3) El papel de la clase colega abstracta (Colega): define la interfaz de la clase colega, guarda el objeto intermediario, proporciona el método abstracto para la interacción del objeto colega y realiza las funciones públicas de todas las clases colega que interactúan entre sí.

    4) Rol Colega Concreto: Es el implementador de la clase colega abstracta, cuando necesita interactuar con otros objetos colega, el objeto intermediario es el responsable de la interacción posterior.

    La intención del patrón de mediador es reducir la relación caótica entre objetos (un gran número de relaciones de muchos a muchos), administrar estos objetos a través de un mediador y encapsular la interacción entre objetos en el objeto del mediador, reduciendo así el acoplamiento entre objetos.

1.2 Ventajas y desventajas del modelo intermediario

  • ventaja

    1) De acuerdo con el principio de responsabilidad única, la comunicación entre componentes se extrae a un solo lugar, lo que reduce el acoplamiento entre componentes y facilita su comprensión y mantenimiento;

    2) Se ajusta al principio de apertura y cierre. Cuando se introduce un nuevo intermediario, no hay necesidad de cambiar los componentes originales.

  • defecto

    El intermediario convierte la interdependencia original entre múltiples objetos en una dependencia entre el intermediario y múltiples colegas.Cuando haya más y más colegas, el intermediario mismo se volverá complicado e hinchado.

1.3 Método de creación

    Tomemos como ejemplo a Xiao Ming alquilando una casa a través de un intermediario.

1) Rol de mediador abstracto (Mediador)

//抽象中介者
public interface Mediator {

	void register(String name,HouseOwner owner); //注册同事对象,房主在中介登记了信息
	
	void forwardMessage(HouseOwner owner,int price); //转发同事信息,与同事对象交互信息的方法
}

2) Rol concreto de mediador

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

	//管理同事对象
	private HashMap<String,HouseOwner> houseowner = new HashMap<String, HouseOwner>();
	
	@Override
	public void register(String name, HouseOwner owner) {
		houseowner.put(name, owner);
	}
	
	@Override
	public void forwardMessage(HouseOwner owner,int price) { 
		if(owner.sendMessage(price)){
			System.out.println("成功租出");
		}else{
			System.out.println("还是看看其他的吧");
		}
	}

}

3) Rol de colega abstracto

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

	private Mediator mediator; //聚合,中介者
	
	public HouseOwner(Mediator mediator){
		this.mediator = mediator;
	}

	public Mediator getMediator() {
		return mediator;
	}
	
	public abstract boolean sendMessage(int price);
}

4) Funciones concretas de los colegas

//具体同事类,也就是具体的房主A
public class HouseAColleague extends HouseOwner{

	public HouseAColleague(Mediator mediator) {
		super(mediator);
		this.getMediator().register("HouseA", this);
	}

	@Override
	public boolean sendMessage(int price) {
		if(price>=900){
			return true;
		}
		System.out.println("我的房子最少租900块");
		return false;
	}

}

//具体同事类,也就是具体的房主B
public class HouseBColleague extends HouseOwner{

	public HouseBColleague(Mediator mediator) {
		super(mediator);
		this.getMediator().register("HouseB", this);
	}

	@Override
	public boolean sendMessage(int price) {
		if(price>=1500){
			return true;
		}
		System.out.println("我的房子最少租1500块");
		return false;
	}

}

 5) cliente

public class Client {

	public static void main(String[] args) {
		//创建中介者
		Mediator mediator = new ConcreteMediator();
		
		//中介带顾客看房子A
		HouseOwner houseA = new HouseAColleague(mediator);
		//房东说
		houseA.sendMessage(900);
		//顾客A只愿意出800
		mediator.forwardMessage(houseA,800);
		
		
		//中介带顾客看房子B
		HouseOwner houseB = new HouseBColleague(mediator);
		//房东说
		houseB.sendMessage(1500);
		//顾客A愿意1500租
		mediator.forwardMessage(houseB,1500);
		
	}
}

Efecto de caso:

El diagrama UML en este momento:

    Los clientes alquilan casas a través de intermediarios, y los intermediarios tratan con propietarios específicos.

1.4 Resumen y sugerencias

    El objetivo principal del modelo intermediario es eliminar la interdependencia entre un grupo de componentes del sistema y volverse dependiente de un único objeto intermediario, que centraliza la comunicación entre los componentes del sistema. Los componentes solo conocen los objetos intermediarios y es difícil comunicarse directamente con los componentes reales (propietarios).

Escenario de aplicación:

    1) El patrón intermediario se puede usar cuando las dependencias de muchos objetos que interactúan de manera compleja hacen que el sistema sea difícil de entender y mantener;

    2) Cuando un objeto se refiere a muchos otros objetos, lo que dificulta la reutilización del objeto, se puede utilizar el modo intermediario.

Aplicación del modo intermediario en JDK:

    java.util.Temporizador

    java.util.concurrent.Executor#execute()

    java.lang.reflect.Method#invoke()

Supongo que te gusta

Origin blog.csdn.net/xiaoxianer321/article/details/125364668
Recomendado
Clasificación