没有用过,看了看API我觉得是这么调用的:A a = new A();
B b1 = new B();
B b2 = new B();
a.addObserver(b1);
a.addObserver(b2);在A的run方法中,当条件符合时
调用a.notifyObservers();Observer这个设计模式的做法就是当被观察者(A)改变时由被观察者通知观察者(B)自身的变化
因此是由A来调用B的update()方法的

解决方案 »

  1.   


    不想B被A自动调起的话
    为什么还用Observer模式呢?
    我记得这本身就是订阅-发布机制啊那么你是不想让B随A的变化而更新了?
    那你打算什么时候对B进行修改呢?
    如何让B知道A有哪些变化了呢?
    又由谁来调起B呢?
      

  2.   

    这样是可以实现的
    在第一个方法中调用A a =new A;a.start()此时不要a.addObserver(b);
    在你想调用B时再用a.addObserver(b);
    这样可以完成操作:P
      

  3.   

    请问danceflash(Wine):
      我写了一个线程A用于不停的接收信息并放到一个list中去,
      observer类:B implements Observer{}用于判断list是否为空,空则等待,否则从list中取出一条放入hashmap中,这样不妥吗?
      如果不这样,那有什么好的方法吗?谢谢!
    sci_fi的办法可以,但我不明白原因!
      

  4.   

    那么B要等多长时间去判断一次list是否为空呢?
    如果使用轮询机制,必然很影响性能
    可以当A接收到消息放入list中之后,就去向B发出通告如果A和B两个类分别只有一个实例的时候,也可以直接由A转发给B,但这样扩展性不好还有一种方法是,A接收消息然后放入list中去,B设置一个定时器,隔一段时间启动一次B去检查list,此时A和B之间没有什么联系,他们都只与list交互我想这三种方法都可以个人认为,如果使用后两种的话,就没有必要去使用Observer和Observable了 ^_^
      

  5.   

    可以用两个线程吗?A每次收到信息存到list中并发过B一个notify信号,B每次判断list是否为空,不是空则取一条信息,并返回信息;否则wait 直到收到notify信号,并返回null。
    这样行吗? 可是我写不出来代码?能告诉我怎么写吗?