Feeds de los foros

En la página principal de los foros encontrarás los enlaces al logo feed feed general y al de cada uno de los foros.

Subscribete para mantenerte informado de los cambios y responde a las dudas siempre que te sea posible

Buscar en el foro

Foro J2SE

feed Foro J2SE Foro: J2SE

Nuevo Tema Nuevo Tema

Comunicación entre objetos. 24/07/2008 14:45
anonymous

Hola a todos.

Soy nuevo en java (vengo de python) y me preguntaba si existe alguna clase ya hecha para pasar mensajes entre objetos.

Es decir el objeto A y B se subscriben al mensaje "hello" y el objeto C envia un mensaje "hello", automaticamente A y B son informados de que C ha enviado "hello".

La idea es desacoplar el tráfico de información entre clases sin la necesidad de crear interfaces por doquier.

Un ejemplo práctico:

Tenemos un programa que cuando el usuario pincha sobre el boton (ON) tiene que activar varias entradas de menú, hacer un beep, activar unos widgets, .... Lo ideal es enviar un mensaje "power_on" y los objetos que estén interesados en el se subscriben a este y actuan en consecuencia cuando lo reciben.

Espero haberme explicado.

 

Saludos.

 

&n bsp;

 

 

 

#unapprove_message#
RE: Comunicación entre objetos. 24/07/2008 15:40
eskabio02

Si entendi bien tu problema,tendrias que usar el Patron Observer en el cual hay un objeto observado y al cambiar su estado este informa a sus observadores.

Si esto no te sirve ,avisa y vuelvo a leer mejor

 

Saludos

#unapprove_message#
RE: Comunicación entre objetos. 24/07/2008 16:35
anonymous

 

http://www.design-nation.net/es/archivos/000547.php

< p> 

Aqui un ejemplo.. 

#unapprove_message#
RE: Comunicación entre objetos. 24/07/2008 18:35
anonymous

Hola. Soy el que originó el hilo.

Efectivamente se trata de un "patron Observer". Yo tenía hecha una implementación en python que termino de portar a java (j2me). La diferencia es que no tengo que crear un objeto por cada subject.

Este es el código:

public interface BcastListener {
void bcastListen(Object from, String message, Object param);
}

 

public class Bcast {
private Hashtable messages;

Bcast() {
messages = new Hashtable();
}

synchronized public void addListener(String message, BcastListener listener){
Vector v;

if ( !messages.containsKey(message)) {
v = new Vector();
messages.put(message, v);
} else {
v = (Vector) messages.get(message);
}
if (! v.contains(listener)){
v.addElement(listener);
}

}

synchronized public void addListener(String[] message, BcastListener listener){
if (message == null) return;

for (int i=0; i < message.length; i++){
this.addListener(message[i], listener);
}
}

synchronized public void delListener(String message, BcastListener listener){
Vector v = (Vector) messages.get(message);
if (v == null) return;
v.removeElement(listener);
if (v.isEmpty()) {
messages.remove(message);
}
}

synchronized public void delListener(String[] message, BcastListener listener){
if (message == null) return;

for (int i=0; i < message.length; i++){
this.delListener(message[i], listener);
}
}

synchronized public void delAll(BcastListener listener){
for (Enumeration e = messages.keys(); e.hasMoreElements();) {
delListener((String) e.nextElement(), listener);
}
}

synchronized public void send(Object from, String message, Object param) {
Vector v;

v = (Vector) messages.get("promisc");
if (v != null) {
for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
((BcastListener)e.nextElement()).bcastListen(from, message, param);
}
}

v = (Vector) messages.get(message);
if (v != null) {
for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {
((BcastListener)e.nextElement()).bcastListen(from, message, param);
}
}

}
}

-----

Se crea un único objeto del tipo Bcast para toda la aplicación, el cual es compartido por todos los objetos que quieren enviar mensajes mediante el metodo send.

los objetos que deben recibir mensajes, deben subscribirse a estos e implementar la interface BcastListen.

Si veis alguna cagada en el código, avisadme porque todavia ando algo patoso con java, (menosmal que existe el NetBeans).

 

Saludos.

 

 

 

#unapprove_message#
#thread_expired#.
Sun Microsystem Logo NHT-Norwick Logo

© 2002-2007 Asociación javaHispano