Re: [問題] 請問java event的實現
※ 引述《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
討論串 (同標題文章)