Java有没有一种类似于C#的委托机制,比如
A类中的某个函数执行过程中,触发一个事件,这个事件能通知B类中的某个方法去执行,通过这样的方法去实现A类和B类之间数据的传递??
求大牛,解答,谢谢~~~~
最好给个例子~~~~
A类中的某个函数执行过程中,触发一个事件,这个事件能通知B类中的某个方法去执行,通过这样的方法去实现A类和B类之间数据的传递??
求大牛,解答,谢谢~~~~
最好给个例子~~~~
调试欢乐多
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 被触发啦!");
}}代码很简单,相信你能看明白,这样是你需要的例子吗?
你说的这种情况,搞得像模像样点,可以这么做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是你想要的效果吗?
算是A委託B吧
在java中可以用类似于event监听的方式,也可以采用“观察者”模式(其实原理一样的,只不过一个是自定义接口,一个是使用已定义好的接口)
event监听方式就像7L,“观察者”模式,可以参考Observable和Observer的sampel
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();
}}