106 votos

Crear un evento personalizado en Java

Quiero hacer algo como esto en Java pero no sé el camino:

Cuando el evento "objeto 1 decir 'Hola'" sucede, entonces objeto 2 responde a ese evento diciendo "Hola".

¿Alguien me puede dar una pista o muestra el código?

212voto

aioobe Puntos 158466

Probablemente quieras investigar el patrón de observador.

Aquí hay algunos ejemplos del código para empezar:

import java.util.*;

interface HelloListener {
    public void someoneSaidHello();
}


class Initiater {
    List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }

    public void sayHello() {
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}


class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}

class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();
    }
}

20voto

GlassGhost Puntos 1129

Existen 3 maneras diferentes que usted puede desear para configurar esto:

  1. Thrower dentro de Catcher
  2. Catcher dentro de Thrower
  3. Thrower y Catcher dentro de otra clase en este ejemplo, Test

EL TRABAJO de GITHUB EJEMPLO ESTOY CITANDO por defecto la Opción 3, a probar los demás, simplemente quite el comentario de la "Optional" bloque de código de la clase que desea ser los principales, y el conjunto de esa clase como ${Main-Class} variable build.xml archivo:

4 Cosas necesarias sobre el lanzamiento de código:

import java.util.*;//import of java.util.event

//Declaration of the event's interface type, OR import of the interface,
//OR declared somewhere else in the package
interface ThrowListener {
    public void Catch();
}
/*_____________________________________________________________*/class Thrower {
//list of catchers & corresponding function to add/remove them in the list
    List<ThrowListener> listeners = new ArrayList<ThrowListener>();
    public void addThrowListener(ThrowListener toAdd){ listeners.add(toAdd); }
    //Set of functions that Throw Events.
        public void Throw(){ for (ThrowListener hl : listeners) hl.Catch();
            System.out.println("Something thrown");
        }
////Optional: 2 things to send events to a class that is a member of the current class
. . . go to github link to see this code . . .
}

2 Cosas necesarias en un archivo de clase para recibir eventos de una clase

/*_______________________________________________________________*/class Catcher
implements ThrowListener {//implement added to class
//Set of @Override functions that Catch Events
    @Override public void Catch() {
        System.out.println("I caught something!!");
    }
////Optional: 2 things to receive events from a class that is a member of the current class
. . . go to github link to see this code . . .
}

18voto

Bozho Puntos 273663

Lo que quieres es una implementación del patrón Observador. Puede hacerlo usted mismo completamente, o utilizar las clases java como java.util.Observer yjava.util.Observable

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X