首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Java 类之间的通信,该如何解决

2012-05-31 
Java 类之间的通信Java有没有一种类似于C#的委托机制,比如A类中的某个函数执行过程中,触发一个事件,这个事

Java 类之间的通信
Java有没有一种类似于C#的委托机制,比如
A类中的某个函数执行过程中,触发一个事件,这个事件能通知B类中的某个方法去执行,通过这样的方法去实现A类和B类之间数据的传递??
求大牛,解答,谢谢~~~~
最好给个例子~~~~

[解决办法]
看了一下C#的委托,有点像java中的接口。
你说的这种情况,搞得像模像样点,可以这么做

Java code
public interface EventHandler {    void execute(String event,Object... parameters);}public class EventContext {    private static Map<String, Set<EventHandler>> EVENT_HANDLER_REGISTER = new HashMap<String, Set<EventHandler>>();    public static void fireEvent(String event, Object... parameters) {        Set<EventHandler> handlers = EVENT_HANDLER_REGISTER.get(event);        if (handlers != null) {            for (EventHandler handler : handlers) {                handler.execute(event, parameters);            }        }    }    public static void registerEventHandler(String event, EventHandler handler) {        Set<EventHandler> handlers = EVENT_HANDLER_REGISTER.get(event);        if (handlers == null) {            handlers = new HashSet<EventHandler>();            EVENT_HANDLER_REGISTER.put(event, handlers);        }        handlers.add(handler);    }    public static Set<EventHandler> getEventHandlers(String event) {        return EVENT_HANDLER_REGISTER.get(event);    }}public class A {    void doSomething(){        //do something        EventContext.fireEvent("somethingDone","some value from A");    }}public class B implements EventHandler {    @Override    public void execute(String event,Object... parameters) {        System.out.println("I'm running with "+ parameters[0]);    }}public class Test {    public static void main(String[] args) {        A a=new A();        B b=new B();        EventContext.registerEventHandler("somethingDone",b);        a.doSomething();    }}
[解决办法]
簡單點就是觀察者模式,給一個簡單的sample
Java code
interface Observer{    void ChangeEvent();}class A{    private Observer ob;    A(){        ob = null;    }    void SetObserver(Observer ob){        this.ob = ob;    }    void InvokeB(){        if (ob != null)            ob.ChangeEvent();    }}class B implements Observer{    public void ChangeEvent(){        System.out.println("B is invoked");    }}public class ObserverTest {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        A a = new A();        a.SetObserver(new B());        a.InvokeB();    }} 

热点排行