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

解决方案 »

  1.   

    监听器模式,java中应用很多。
      

  2.   

    委托功能就用timer ,timerTask吧。
      

  3.   


    public class A {
    /*
     * main entry
     */
    public static void main(String[] args)
    {
    B b=new B();
    for(int i=0;i<10;i++)
    {
    if(i>5)
    b.printf();

    }
    }}
    public class B {
    /*
     * print some information 
     */
    public void printf()
    {
    System.out.println("B 被触发啦!");
    }}代码很简单,相信你能看明白,这样是你需要的例子吗?
      

  4.   

    看了一下C#的委托,有点像java中的接口。
    你说的这种情况,搞得像模像样点,可以这么做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();
        }
    }运行test会输出
    I'm running with some value from A是你想要的效果吗?
      

  5.   

    A類的內部若含有B類的引用,兩者就可以通信
    算是A委託B吧
      

  6.   

    拦截器,过滤器。。Filter Interceptor
      

  7.   

    这不就是回调吗
    在java中可以用类似于event监听的方式,也可以采用“观察者”模式(其实原理一样的,只不过一个是自定义接口,一个是使用已定义好的接口)
    event监听方式就像7L,“观察者”模式,可以参考Observable和Observer的sampel
      

  8.   

    簡單點就是觀察者模式,給一個簡單的sample
    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();
    }}