Java 类之间的通信

jimms66666 2012-04-17 05:20:12
Java有没有一种类似于C#的委托机制,比如
A类中的某个函数执行过程中,触发一个事件,这个事件能通知B类中的某个方法去执行,通过这样的方法去实现A类和B类之间数据的传递??
求大牛,解答,谢谢~~~~
最好给个例子~~~~
...全文
260 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy2015yc 2012-04-18
  • 打赏
  • 举报
回复
簡單點就是觀察者模式,給一個簡單的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();
}

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


  • 打赏
  • 举报
回复
拦截器,过滤器。。Filter Interceptor
dracularking 2012-04-18
  • 打赏
  • 举报
回复
A類的內部若含有B類的引用,兩者就可以通信
算是A委託B吧
zqfddqr 2012-04-18
  • 打赏
  • 举报
回复
tcpip
cseu 2012-04-18
  • 打赏
  • 举报
回复
看了一下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

是你想要的效果吗?
hu0905074231 2012-04-17
  • 打赏
  • 举报
回复

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 被触发啦!");
}

}

代码很简单,相信你能看明白,这样是你需要的例子吗?
dxqrr 2012-04-17
  • 打赏
  • 举报
回复
你可以在A类中存放一个B类型的成员变量
sdojqy1122 2012-04-17
  • 打赏
  • 举报
回复
委托功能就用timer ,timerTask吧。
jimms66666 2012-04-17
  • 打赏
  • 举报
回复
我查了很多监听器模式的例子和看了很多关于监听器的书,全是绑定了键盘事件,鼠标事件,点击事件,完全没有我想要的效果,如何才能实现类似C#的委托一样的功能呢....
jimms66666 2012-04-17
  • 打赏
  • 举报
回复
能给个例子么,我找了很多例子都不怎么懂~~~最好能说明下,本人新手一枚。。。
cseu 2012-04-17
  • 打赏
  • 举报
回复
监听器模式,java中应用很多。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧