作者scdog (just do it)
看板java
标题Re: [问题] 请问java event的实现
时间Thu Mar 15 16:45:01 2007
※ 引述《H45 (!H45)》之铭言:
: ※ 引述《scdog (just do it)》之铭言:
: : public class A{
: : private B b;
: : public A(){
: : b = new B();
: : }
: : }
: : public class B{
: : public B(){
: : }
: : public void doit(){
: : }
: : }
: : 请问如何实现当class B自己发生doit()时, 通知class A发生了doit()事件
: : 乾瞎!
: 这个问题像是:只要B的doit()被呼叫,就通知A
: 在class B的member field新增Class A的reference
: 然後在Class A的member method新增一个通知的方法
: 原程式码会变成
: public class A{
: private B b;
: public A() { b = new B(); }
: // new member method: "update" 用来处理要通知的事项
: public void update(...) {
: // TODO: 通知 A 的事项
: }
: }
: public class B{
: // new member field: "a" 作为要通知的对象
: private A a;
: public B() {}
: public void doit() {
: // 在此通知 A: "doit() 被呼叫了"
: a.update(...);
: }
: }
: 如果要通知的物件太多,那麽可以考虑用一个容器去装
: 另外,如果太多物件都要进行通知的动作,那麽可以考虑进行一般化
: 而这就是Observer Pattern
: http://java.sun.com/javase/6/docs/api/java/util/Observable.html
: http://java.sun.com/javase/6/docs/api/java/util/Observer.html
感谢各位大大帮忙
但是A和B之间的关系是A include B,故code中我不能写成B include A
在B中没交代清楚
void doit(){
loop{
// if something happen in the loop, it must notify A right away
}
}
observe方式看起来好像不能主动通知class a资料已经改变
需要A自己去查询
所以只好用event的方式
不知这样对不对....
乾瞎!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.96.194.99