Este artículo describe el uso del modo Observador para implementar la función de advertencia de alta temperatura de la Oficina Meteorológica. Compártelo para su referencia, como sigue:
1. Definición de patrones
Modo Observador, también conocido como Modo Publicar/Suscripción. El patrón del observador define una dependencia de uno a muchos entre objetos. Cuando cambia el estado de un objeto, todos los objetos que dependen de él se notifican y se actualizan automáticamente.
2. Ejemplos del modelo
1 análisis de patrones
Tomamos prestada la advertencia de alta temperatura de la Oficina Meteorológica para ilustrar este modelo.
2 Diagrama de clase estática de patrón de observador
3 ejemplos de código
3.1 Interfaz de observador-IOBSERVER
paquete com.demo.observer; import com.demo.subject.isubject;/** * Observer Interface * @author * */Public Interface IOBServer {// Actualizar el método public void Update (Isubject Sujeto);}3.2 Interfaz de tema-isubjeto
paquete com.demo.subject; import com.demo.observer.ioBserver;/** * Topic Interface (Observer) * * @author * */public interface isubject {/** * Agregar observador * * @param observador * @return */public boolean add (IOBServer Observer); / ** * Eliminar observador * * @param observador * @return */ public boolean remove (IOBServer Observer); / *** Notifique a todos los observadores que actualicen los datos*/ public void notifyAllObServer (); / ** * Establezca el valor de temperatura * * @param temperatura */ public void setTemperatura (temperatura de flotación); / ** * Obtenga una advertencia de temperatura * * @return */ public string tempteraturePort ();}3.3 Implementación de un sujeto en temas específicos
paquete com.demo.subject; import java.util.iterator; import java.util.vector; import com.demo.observer.ioBserver;/** * CLASE DE IMPLEMENTACIÓN DE TEMA (Observador) * * @author * */clase pública Implementa el sujeto de la clase {// temperatura/** * (i) Alta temperatura Amarules Señal * * Estándar: el estándar de la temperatura de la temperatura de la máxima) días consecutivos. * * (2) Señal de advertencia naranja de alta temperatura * * Estándar: la temperatura máxima aumentará a más de 37 ℃ en 24 horas. * * (Iii) Señal de advertencia roja de alta temperatura * * Estándar: la temperatura máxima aumentará a más de 40 ℃ en 24 horas. */ temperatura flotante privada; // Nivel de alerta temprana de cadena privada Warninglevel; // Guardar lista de observadores Vector final privado <Iobserver> vector; / *** Método de construcción Inicializar la lista de observadores*/ public Sujem () {vector = new Vector <IobServer> (); } / *** Agregar observador* / public boolean add (IOBServer Observer) {if (observador! = Null &&! Vector.contains (observador)) {return vector.add (observador); } return false; } / *** eliminar observador* / public boolean Remete (IOBServer Observer) {return vector.remove (observador); } / *** Notifique a todos los observadores que actualicen los datos* / public void notifyAllObServer () {System.out.println ("============= El departamento meteorológico de Meteorológico libera alta temperatura" + this.WarningLevel + "Alarm! ======================); Iterator <iobserver> iterator = vector. (iterator.hasnext ()) {(iterator.next ()). update (this); = "amarillo"; */ public void setTemperature (temperatura de flotación) {this.temperature = temperatura;3.4 PERSONERO PERSONAL PERSONOBSERVER
paquete com.demo.observer; import com.demo.subject.isubject;/** * Observador de usuario individual * @author * */public class PersonObServer implementa IOBServer {public void Update (Isubject Sujem) {System.out.println ("Los individuos reciben una advertencia de temperatura alta:" + temas.temperaturerePort ()); }}3.5 Observador de observador gubernamental
paquete com.demo.observer; import com.demo.subject.isubject;/** * Observador de usuarios del gobierno * @author * */public class GobiernoBserver implementa IOBServer {public void Update (Isubject Sujem) {System.out.println ("Departamento gubernamental recibió una advertencia de alta temperatura:" + Sujem.temperatureRerPort ()); }}3.6 CompanyObserver
paquete com.demo.observer; import com.demo.subject.isubject;/** * Instituciones e instituciones Observador de usuarios * @author * */public class CompanyObServer implementa IOBServer {public void Update (asunto isubject) {System.out.Println ("Enterprises e instituciones reciben altas temperaturas advertencias:" + SUJETURO. }}3.7 Deje que el sistema comience a ejecutar un cliente
paquete com.demo; import java.util.random; import com.demo.observer.comPanyObserver; import com.demo.observer.governmentobserver; import com.demo.observer.personobserver; import.demo.subject.isubject; import com.demo.subeject.subject;/** ** ** ** ** ** **TILLA* TIENTES* @author * */public class Client {/** * @param args */public static void main (string [] args) {// Crear objeto de tema isubject tema = new Sujem (); // Agregar observador de asunto empresarial e institucional. // Agregar observador de usuarios gubernamentales Sujeto.Add (New GobiernoBServer ()); // Agregar observador de usuarios individuales Sujeto.Add (New PersonObServer ()); Aleatorio aleatorio = new Random (); int i = 0; while (++ i <10) {// establecer sujeto de temperatura aleatoria. }}}4 Resultados de ejecución
======== El departamento meteorológico emite una alarma amarilla de alta temperatura! =======
Las empresas e instituciones reciben advertencia de alta temperatura: Temperatura: 35.0
Los departamentos gubernamentales recibieron advertencia de alta temperatura: Temperatura: 35.0
Las personas reciben advertencia de alta temperatura: Temperatura: 35.0
======== El departamento meteorológico emite una alarma roja para una temperatura alta! ======
Las empresas e instituciones reciben advertencia de alta temperatura: Temperatura: 43.0
Los departamentos gubernamentales recibieron advertencia de alta temperatura: Temperatura: 43.0
Las personas reciben advertencia de alta temperatura: Temperatura: 43.0
======== El departamento meteorológico emite una alarma naranja de alta temperatura! ======
Las empresas e instituciones reciben advertencia de alta temperatura: Temperatura: 37.0
Los departamentos gubernamentales recibieron advertencia de alta temperatura: Temperatura: 37.0
Las personas reciben advertencia de alta temperatura: Temperatura: 37.0
3. Los principios de diseño de este modelo
Principio de 1 "cerrado abierto"
2 Principio de responsabilidad única
3. El principio de inversión de dependencia
4. Use ocasiones
1 Cuando un modelo abstracto tiene dos aspectos, uno de los cuales depende de la otra, y debe encapsularse en objetos independientes y cambiar de forma independiente y multiplexarse entre sí.
2 Cuando el cambio de un objeto en un sistema requiere cambiar el contenido de otros objetos al mismo tiempo, pero no sabe cuántos objetos se cambiarán.
3 Cuando se debe notificar el cambio de un objeto para realizar los cambios correspondientes, pero no es posible determinar a quién se notifica el objeto.
5. Diagrama de clase estática "Tirar de datos"
El llamado "Pushing Data" significa que cuando el objeto observado cambia, los datos relevantes se pasan al Observador a través de los parámetros, que forma el Observador "Empujar datos" al Observador. El diagrama de clase estática es el siguiente:
6. Diagrama de clase estática "Tirar de datos"
El llamado "Datos de extracción", el objeto Observador contiene una referencia a la instancia del objeto que se observa. Cuando el objeto que se observa cambia, no se pasarán datos al observador. El observador obtiene activamente los datos relevantes basados en la referencia del objeto que se observa. Esto forma el observador "extrae datos" del objeto que se observa. El diagrama de clase estática es el siguiente:
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.