Re: [問題] 請問java event的實現

看板java作者 (just do it)時間19年前 (2007/03/15 16:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/9 (看更多)
※ 引述《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
文章代碼(AID): #15-GUEoo (java)
討論串 (同標題文章)
文章代碼(AID): #15-GUEoo (java)