[Modo de diseño] ------ Modo de observador y su modo de publicación y suscripción actualizado

El concepto

Modo observador, el principio es muy simple, inyecta subclases de clase A en clase B y llama a métodos de clase A llamando a métodos de clase B, que se llama modo observador.

El pseudocódigo es el siguiente, la forma más rápida de comprender el patrón de observación:

接口 A{
	// 观察者接口
	notify();
}
Class A1 extend A{
	// 等待被调的接口
	notify(){
		// A1类特有的实现
		println(A1被通知);
	}
}
Class A2 extend A{
	notify(){
		println(A2被通知);
	}
}
Class B{
	List<A> alist;
	addA(A a){
		//将观察者注入到B中
		alist.add(a);
	}
	void notify(){
		for(A a : alist){
			// 循环通知每一个A的实现对象
			a.notify();
		}
	}
}
Class Test{
	main方法(){
		// 定义通知者B
		B b = new B();
		// 将两个观察者A1,A2注册到B中
		b.addA(new A1());
		b.addA(new A2());
		
		// 当B发出通知后,就会循环调用那些曾经在自己这里注册过的观察者
		b.notify();
	}
}

Escenarios de uso de observadores

El pseudocódigo anterior es el prototipo más simple del patrón de observación.
El modo de observador se usa generalmente cuando un cambio (método de notificación de B) causará múltiples cambios (método de notificación de A). Por ejemplo, después de realizar una operación, necesito ejecutar varios métodos al mismo tiempo.

Por ejemplo: notificación de mensaje

Cuando el sistema genera un mensaje, necesita enviar mensajes del sistema, mensajes de correo, mensajes SMS e incluso otros tipos de mensajes en el futuro.
Luego puede obtener la clase principal A del mensaje y definir la notificación de interfaz de envío.
Cada uno de los siguientes mensajes es una subclase de A, y luego tiene su propia implementación diferente de enviar mensajes.
Luego, cree una clase B para enviar mensajes y registre estas subclases de A a B. De antemano. Cuando el sistema genera un mensaje, solo necesita llamar al envío de B para enviar el mensaje a varios lugares.

Otro ejemplo: explotación del propietario

El propietario es el informante.
Todos los trabajadores a largo plazo son observadores.
Cada trabajador a largo plazo debe observar las órdenes del propietario. Por ejemplo, el propietario dijo que la limpieza, y todos los trabajadores a largo plazo registrados con el propietario comenzaron a limpiar. Si tiene un nuevo trabajador permanente, regístrese con el arrendador. La próxima vez que el arrendador emita otra orden, el nuevo trabajador permanente será el mismo que el trabajador permanente anterior.

Observador ventajas y desventajas

Ventajas: observadores desacoplados, puede agregar fácilmente múltiples observadores.
Desventaja: el observador y el notificador están acoplados, es decir, en el pseudocódigo anterior, A y B están acoplados.

Para resolver esta deficiencia, hay una versión mejorada del modo de observador: modo de publicación y suscripción

Publicar y suscribir modelo

El modelo de publicación y suscripción es familiar para todos, porque el mq que utilizamos se basa en el modelo de publicación y suscripción
.
¿Dónde se ha mejorado? Sabemos que en el modo de observador, el observador y el notificador están acoplados y no se pueden reemplazar a voluntad. El modelo de publicación y suscripción resuelve este acoplamiento.
Llame al notificador anterior, al editor y
al observador anterior, al suscriptor.
Luego hay un tercero entre el editor y el suscriptor, que registra la relación entre el editor y el suscriptor, es decir, quién se suscribió y quién
llama desde No hay necesidad de emparejarse.

Además de mq, simple también puede estudiar el bus de eventos de Google, puede consultar mi artículo anterior, hay ejemplos listos para ejecutar, puede sentirlo.
Spring boot integra EventBus de Google Guava para lograr una versión independiente del mensaje publicar y suscribirse

203 artículos originales publicados · elogiados 186 · 210,000 visitas

Supongo que te gusta

Origin blog.csdn.net/java_zhangshuai/article/details/105128955
Recomendado
Clasificación