Modo de observador del patrón de diseño 16

antecedentes

Debe conocer el patrón de observador y haberlo utilizado. Si no ha escuchado las palabras patrón de observador, entonces debe conocer el modelo de publicación-suscripción. Cuando usamos middleware de mensajes como Kafka, usamos el modelo de publicación-suscripción para la producción y el consumo de datos. Puede entender el modelo de publicación-suscripción como un modelo de observador.

El siguiente código:

Kafka lanzó el mensaje:

 ListenableFuture future = kafkaTemplate.send(topic, jsonString);

Noticias de suscripción para consumidores:

@KafkaListener(topics = "${spring.kafka.topic}")
 public void listen(ConsumerRecord<?, ?> record) {
        log.info("topic={}, offset={}, message={}", record.topic(), record.offset(), record.value());
 }

Lo anterior es cómo utilizar la publicación-suscripción de Kafka.

Además del middleware de mensajes de publicación-suscripción, el mecanismo de vigilancia de zookeeper también utiliza el modo de observador. Puedes pensar en ello, ¿bajo qué circunstancias usarías el modo de observador?

¿Cuál es el patrón del observador?

En la vida real, muchos objetos no existen de forma independiente y el cambio de un objeto a menudo conduce al cambio de otros objetos. Por ejemplo: cuando no esté en el trabajo, se irá a casa después del trabajo, se detendrá cuando se encuentre con un semáforo en rojo en la carretera e invertirá más cuando la bolsa esté mejor.

Si desea describir la relación antes mencionada en desarrollo, puede usar el modo de observador.

"

Defina una dependencia de uno a muchos entre objetos para que cuando un objeto cambie de estado, todos sus dependientes sean notificados y actualizados automáticamente. Los objetos que dependen de él serán notificados y actualizados automáticamente).

"

El patrón de observador se compone principalmente de 4 elementos:

"
  • Función de sujeto abstracto (Sujeto): también llamada clase de destino abstracta, proporciona una clase agregada para guardar objetos de observador, métodos para agregar y eliminar objetos de observador y métodos abstractos para notificar a todos los observadores.

  • El rol del Sujeto Concreto: También se le llama clase objetivo concreto. Implementa el método de notificación en el objetivo abstracto. Cuando el estado interno del sujeto concreto cambia, notifica a todos los objetos observadores registrados.

  • Rol de Observador abstracto (Observador): Es una clase o interfaz abstracta, que contiene un método abstracto para actualizarse a sí mismo, al que se llama cuando se recibe una notificación de un cambio en un tema específico.

  • Rol del observador concreto (Concrete Observer): para implementar el método abstracto definido en el observador abstracto, con el fin de actualizar su propio estado cuando se notifica de cambios en el objetivo.

"

El diagrama de estructura es el siguiente:

Modo de observador

Código

Tema

Observador

Hormigón Sujeto

ConcreteObserver

El código de prueba es el siguiente:

@Test
public void test() {
    Subject subject=new ConcreteSubject();
    Observer obs1=new ConcreteObserver1();
    Observer obs2=new ConcreteObserver2();
    subject.add(obs1);
    subject.add(obs2);
    subject.notifyObserver();
}

Los resultados de la prueba son los siguientes:

具体目标发生改变...
--------------
具体观察者1作出反应!
具体观察者2作出反应!

Reflexiones sobre el modelo de observador

¿En qué circunstancias podemos utilizar el modo de observador?

Si hay una relación de uno a muchos entre objetos, un cambio en el estado de un objeto afectará a otros objetos, podemos usar el modo de observador. Déjame darte un ejemplo, si un producto tiene problemas de calidad. Necesitamos congelar los pedidos que ya han comprado el producto, luego podemos usar el modo de observador. Ejecutamos una orden de congelación del producto, cuando el producto está congelado, todos los pedidos que contienen el producto serán notificados y congelados.

Pensemos en ello de nuevo, en otra escena. Después de realizar un pedido, los usuarios deben enviar puntos, generar información de logística, notificaciones por SMS y notificaciones de WeChat. ¿Se puede usar el modo de observador? Con respecto a este tema, también escribí un artículo antes de discutir los beneficios de usar el modo de observador, quienes estén interesados ​​pueden echar un vistazo.

"

Desarrollo de combate real: utilicé el mecanismo de monitoreo de eventos de Spring para lograr el desacoplamiento del módulo

"

Me pregunto si lo averiguó, el acoplamiento entre el observador y lo observado es muy bajo. De esta manera, el observador y lo observado son fáciles de expandir.

El modo de observador es fácil de implementar una cadena de activación. ¿Qué es una cadena de activación? Por ejemplo, cuando el despertador te despierta por la mañana, te levantas, tienes hambre, vas a desayunar y es casi la hora del trabajo, conducirás al trabajo y cuando se acabe el tiempo de trabajo, enciendes su computadora y comience a pescar. Esta serie de mecanismos de activación forman una cadena de activación.

El modo de observador debe considerar la eficiencia del desarrollo y los problemas de eficiencia operativa. Un observador, múltiples observadores, el desarrollo y la depuración serán más complicados, y la notificación de mensajes en Java se ejecuta secuencialmente de forma predeterminada, y un observador está bloqueado, lo que afectará Eficiencia de ejecución general. En este caso, generalmente se considera un enfoque asincrónico.

Recomendado en el pasado

Escanee el código QR para ser más emocionante. O busque Lvshen_9 en WeChat , puede responder para obtener información en segundo plano

  1. 回复"java" 获取java电子书;

  2. 回复"python"获取python电子书;

  3. 回复"算法"获取算法电子书;

  4. 回复"大数据"获取大数据电子书;

  5. 回复"spring"获取SpringBoot的学习视频。

  6. 回复"面试"获取一线大厂面试资料

  7. 回复"进阶之路"获取Java进阶之路的思维导图

  8. 回复"手册"获取阿里巴巴Java开发手册(嵩山终极版)

  9. 回复"总结"获取Java后端面试经验总结PDF版

  10. 回复"Redis"获取Redis命令手册,和Redis专项面试习题(PDF)

  11. 回复"并发导图"获取Java并发编程思维导图(xmind终极版)

Otro: haga clic en [ Mis beneficios ] para tener más sorpresas.

 

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/109524329
Recomendado
Clasificación