Latest web development tutorials

patrón Observer

Cuando hay muchas relaciones entre los objetos, utilice el patrón de observador (patrón Observador). Por ejemplo, cuando se modifica un objeto, se le notificará automáticamente sus objetos dependientes. El patrón de observador pertenece a los patrones de comportamiento.

introducción

Intención: definir dependencias entre objetos de uno-a-muchos, cuando se cambia el estado de un objeto, todos los objetos que dependen de ella son notificados y actualizados automáticamente.

Principalmente para resolver: un estado de la notificación de cambio de objeto a los problemas de otros objetos, sino también teniendo en cuenta la facilidad de uso y bajo acoplamiento, garantizar un alto grado de colaboración.

Cuándo utilizar: un objeto (objeto de destino) cambia de estado, se notificará a todos los objetos dependientes (objetos de observación), la notificación de difusión.

Cómo solucionarlo: uso de la tecnología orientada a objetos, esta dependencia puede ser debilitada.

El código de la llave: clase abstracta tiene un ArrayList almacenado observadores.

Ejemplos de aplicación: 1, cuando la subasta, el subastador observar el precio más alto, y luego notificar a otros oferentes oferta.2, Viaje al Oeste dentro Wukong rendición petición Red Boy Buda, Buda agua se derramó sobre el piso de una antigua provocan tortuga, esta tortuga es el observador, se observó que la acción de riego Buda.

Ventajas: 1, el observador y lo observado son abstractos acoplada.2, para establecer un mecanismo de disparo.

Desventajas: 1, si el objeto observado tiene una gran cantidad de observador directo e indirecto, así lo notificará a todos los observadores han de pasar mucho tiempo.2, si hay una dependencia circular entre el observador y lo observado objetivo, observar el objetivo provocar llamadas a hacer circular entre ellas, puede hacer que el sistema se bloquee. 3, el modo observador no existe un mecanismo para que el espectador sabe el público es cómo los cambios observados, pero sólo sé que los cambios de destino de observación.

Escenarios de uso: 1, método común subclase múltiple, y la misma lógica.2, los métodos importantes, los complejos pueden ser considerados como un método de plantilla.

Nota: 1, JAVA ya tiene observadores clases de apoyo de modo.2, para evitar referencias circulares. 3, si la orden de ejecución, un espectador puede causar errores en el sistema atrapados, generalmente utiliza el modo asíncrono.

realización

El patrón de observador utilizando tres clases Asunto, observador y cliente. Como la imagen del cliente con el objeto y el observador es métodos de observador encuadernados atadas Client Solutions de objetos. Creamos laclase Asunto,clase abstracta Observer y se amplía la clase abstractaObservadorclase de entidad.

ObserverPatternDemo,nuestras clases de demostración utilizando objetos de clase y entidadessujetasa demuestran el patrón Observer.

El diagrama UML patrón de observador

Paso 1

Crear categoría Asunto.

Subject.java

java.util.ArrayList importación;
java.util.List importación;

public class {Asunto
	
   Lista privada <Observer> observadores 
      = New ArrayList <Observer> ();
   Estado int privado;

   public int getState () {
      estado de retorno;
   }

   pública setstate vacío (estado int) {
      this.state = Estado;
      notifyAllObservers ();
   }

   public void adjuntar (observador Observador) {
      observers.add (observador);		
   }

   notifyAllObservers public void () {
      para (observador Observador: los observadores) {
         observer.update ();
      }
   } 	
}

Paso 2

Crear clase Observador.

Observer.java

Observador clase abstracta pública {
   Materias protegidas;
   actualización public abstract void ();
}

paso 3

Crear clase de entidad observadora.

BinaryObserver.java

BinaryObserver clase pública se extiende Observador {

   BinaryObserver pública (Nos reservamos el sujeto) {
      this.subject = sujeto;
      this.subject.attach (this);
   }

   @ Override
   actualización public void () {
      System.out.println ( "Serie binaria:" 
      + Integer.toBinaryString (subject.getState ())); 
   }
}

OctalObserver.java

OctalObserver clase pública se extiende Observador {

   OctalObserver pública (Nos reservamos el sujeto) {
      this.subject = sujeto;
      this.subject.attach (this);
   }

   @ Override
   actualización public void () {
     System.out.println ( "Octal cadena:" 
     + Integer.toOctalString (subject.getState ())); 
   }
}

HexaObserver.java

HexaObserver clase pública se extiende Observador {

   HexaObserver pública (Materias) {
      this.subject = sujeto;
      this.subject.attach (this);
   }

   @ Override
   actualización public void () {
      System.out.println ( "Hex de la secuencia:" 
      + Integer.toHexString (subject.getState ()) .toUpperCase ()); 
   }
}

Paso 4

Use objetos entidadsujetay de observación.

ObserverPatternDemo.java

ObserverPatternDemo public class {
   principales argumentos (String []) {public static void
      Materias = nuevo sujeto ();

      nueva HexaObserver (sujeto);
      nueva OctalObserver (sujeto);
      nueva BinaryObserver (sujeto);

      System.out.println ( "Primer cambio de estado: 15");	
      subject.setState (15);
      System.out.println ( "Segundo cambio de estado: 10");	
      subject.setState (10);
   }
}

paso 5

Verifique la salida.

En primer cambio de estado: 15
Cadena hex: F
Cadena octal: 17
Cadena binaria: 1111
Segundo cambio de estado: 10
Hexagonal de la secuencia: Un
Cadena octal: 12
Cadena binaria: 1010