作者H45 (!H45)
看板java
标题Re: [问题] 请问java event的实现
时间Thu Mar 15 17:36:01 2007
※ 引述《scdog (just do it)》之铭言:
: ※ 引述《H45 (!H45)》之铭言:
: : 这个问题像是:只要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的方式
^^^^^
我先专门针对event回文
所谓的event方式,是指外界dispatchEvent(Event e)到指定的物件之後
会呼叫该物件的processEvent(Event e)
然後此函数会再呼叫对应的process<event type>Event(Event e)
接着从已登记的Listeners中取出<event type>Listener
再呼叫此Listener对应此event的方法,完成整个event的处理
http://java.sun.com/javase/6/docs/api/java/awt/Component.html
我认为原问题不需要用到event方式......
再者,我所写的程式码并非不能主动通知class a资料已经改变
请你再确认一次看看
: 不知这样对不对....
: 乾瞎!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.205.85