Java 类之间的通信
Java有没有一种类似于C#的委托机制,比如
A类中的某个函数执行过程中,触发一个事件,这个事件能通知B类中的某个方法去执行,通过这样的方法去实现A类和B类之间数据的传递??
求大牛,解答,谢谢~~~~
最好给个例子~~~~
[解决办法]
看了一下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(); }}
[解决办法]
簡單點就是觀察者模式,給一個簡單的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(); }}