Primero, presentemos lo que es un oyente:
Listener: es un programa Java ordinario que implementa la interfaz pendiente. Este programa se usa específicamente para escuchar las llamadas de método de otra clase.
Esto está utilizando el modo Observador.
¿Qué es el modo 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 para actualizar automáticamente.
Ejemplo:
El AddXXXXListener en la programación GUI es todo el modo Observer.
Por ejemplo, agregar eventos de escucha a los clics del botón, agregar eventos de escucha al teclado, etc.
Tres categorías importantes de patrón de observador:
La fuente del evento que se escucha, es decir, el objeto que estamos usando.
El oyente registrado se usa específicamente para escuchar los objetos utilizados actualmente.
¡El evento del objeto del evento es el objeto que se escucha!
Primero veamos una versión simple del monitor escrito por usted mismo.
Versión simple:
Hay fuentes de eventos, oyentes y clases de prueba.
El evento se implementará en la próxima versión completa.
Pasos de desarrollo:
Paso 1: Implemente una persona de clase que necesita ser escuchada.
Paso 2: Implemente una interfaz de escucha ipersonrunlistener.
Paso 3: en clase persona, proporcione un método (o múltiple, proporciono 2 métodos aquí) para registrar clases de ipersonrunlistener, es decir, addbefore y addafter
Paso 4: La instancia de la clase IpersonRunlistener debe mantenerse en la clase de la persona.
Paso 5: Al llamar al método de persona.
Paso 6: En la clase de demostración, instanciar a la persona y registrar un oyente.
Persona:
paquete cn.hncu.designpattern1; persona de clase pública {nombre de cadena privada; oyente privado ipersonrunlistener1; oyente privado ipersonrunlistener2; persona pública (nombre de cadena) {super (); this.name = name; } public void run () {if (oyente1! = null) {oyente1.fighting (); } System.out.println (nombre+"ejecutar ..."); if (oyente2! = NULL) {oyente2.fighting (); }} public void addbefore (IpersonRunListener Listener) {this.listener1 = oyente; } public void addafter (IpersonRunlistener oyente) {this.listener2 = oyente; }} interfaz ipersonrunlistener {public void fighting ();}Manifestación
paquete cn.hncu.designpattern1; public class demo {public static void main (string [] args) {persona persona = nueva persona ("zhang san"); Ipersonrunlistener oyente = new ipersonRunListener () {@Override public void luchador () {// Hay muchas cosas que puede hacer aquí, no solo la salida // Sin embargo, ya que aún no ha escrito el objeto de eventos, no puede obtener el sistema.out.println ("Esté preparado primero ..."); }}; persona.Addbefore (oyente); A a a = nuevo a (); persona.Addafter (a); persona.run (); }} Clase A implementa IPersonRunListener {@Override public void luchador () {// Hay muchas cosas que puede hacer aquí, no solo la salida // Sin embargo, ya que aún no ha escrito el objeto del evento, no puede obtener el sistema.out.println llamado por quién fue ("ejecutar,"); }}Producción:
Agregar fuente de evento en la versión completa:
Aquí, se ha agregado un objeto de evento de evento al anterior. Se considera la versión completa.
Pasos de desarrollo:
Paso 1: Continúe agregando una clase PersoneVent basada en la página anterior (tenga en cuenta que dije que es una clase, no una interfaz), que representa el objeto de evento.
Paso 2: Agregue un atributo de persona al objeto Personvent para identificar el objeto de origen del evento.
Paso 3: Modifique el método de lucha de la interfaz Personlistener y deje que reciba un parámetro Personvent.
Paso 4: En el método de ejecución de la clase de persona, si se determina que la propiedad de la lista de personas no está vacía, se llama el método de lucha, el PERPERONEVEVEVE se instancia y el método de lucha se pasa al método de lucha.
Paso 5: En el método principal, pruebe si se trata del mismo objeto a través del método de GetSource de Personvent.
Persona.java
paquete cn.hncu.designpattern2; public class Person {Nombre de cadena privada; oyente privado ipersonrunlistener; persona pública (nombre de cadena) {super (); this.name = name; } public void run () {System.out.println (nombre+"Comenzar en ejecución ..."); if (oyente! = null) {oyente.fighting (new Personvent (this)); }} public void addpersonListener (IpersonRunListener Listener) {this.listener = oyente; } public String getName () {nombre de retorno; } @Override public String toString () {return "persona [name =" + name + ", oyente =" + oyente + "]"; }} interfaz ipersonrunlistener {public void fighting (Personvent PE);} clase PersonVent {Person p = null; Public Personvent (persona P) {this.p = p; } public String getName () {return p.getName (); } objeto público getSource () {return p; }} // También podemos escribir una clase básica que nos ayude a implementar la interfaz // escribe nuestra plantilla común. Si heredamos esta clase, podemos dejar de escribirla. // Si hay diferentes funciones, lo escribiremos nosotros mismos para anular esta clase de clase predeterminada que implementa ipersonrunlistener {@Override public void Fighting (Personvent PE) {System.out.println ("Acción predeterminada ..."); }}Demo.java
paquete cn.hncu.designpattern2; public class demo {public static void main (string [] args) {persona p1 = nueva persona ("zhang san"); Persona P2 = nueva persona ("Jack"); Ipersonrunlistener oyente = new ipersonRunListener () {@Override public void Fighting (Personvent PE) {System.out.println (pe.getSource ()+"Ha sido ejecutado ..."); if (pe.getName (). Equals ("Zhang San")) {System.out.println (PE.GetName ()+"Ejecutar en primer lugar ..."); }}}}; p1.addpersonlistener (oyente); P2.AddPersonListener (oyente); p1.run (); p2.run (); Persona p3 = nueva persona ("li si"); P3.AddPersonListener (nuevo defaultCatListener ()); p3.run (); }}Resultados de demostración:
Estos son los principios básicos. Si cambia la salida del evento en la acción que necesita, puede darse cuenta de la función que desea. Agregue un oyente y puede llamar al método que desea llamar antes o después del método Ejecutar y haga la acción que desea hacer.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.