2012-06-16 71 views
2

我必须实施通知服务,并发送一些消息以提供有关音乐的新内容。观察和通知

public class FilterByMusic implements Observer { 

    private String music; 
    private Observable observe; 

    public FilterByMusic(String music, Observable observe) { 
     this.music = music; 
     this.observe = observe; 
    } 

    @Override 
    public void update(Observable o, Object arg) { 
     System.out.println(arg); 
    } 
} 

我做了延伸可观察到用这种方法

public void newMusicNotify() { 
    //new music here.. 
    this.setChanged(); 
    this.notifyObservers(music); 
    } 

所以它的工作原理,如果有一个新的音乐将通知其观察对象的所有观察者另一个类。但是现在我想要一个过滤器,如果它是由我在FilterByMusic中作为参数的特定音乐发送给观察者的消息。我有一位观众想要通知所有新音乐,而观众只需要特定的音乐(因为他不喜欢各种音乐),我该怎么做?

我感谢你们的帮助!

回答

-1

我会建议,而不是使用Java的oberver接口,只是做你自己的。这样,你会更加灵活。

+0

这不会回答问题 – Ted

0

如果你想有一个以上Observable使用某种ContainerMap(即map["rockObserver"]),进入方法update(Observable o, Object arg)使用switch取决于music

+0

因此它会将通知发送给所有观察者,并使用更新方法处理过滤get。我认为如果音乐不是观众想要的音乐(在过滤器构造函数中给出的),那么我不会发送该消息,否则我会发送它并将其打印到更新方法中。 有没有办法做到这一点?谢谢 – pfu

+0

在'update()'方法中,你可以使用'if(this.music是可观察到的){//通知}' – IProblemFactory

+1

@Michael你可以将许多SpecificObservable包装在一个BigObservable中。在bigObservable.addObserver中将观察者订阅到您喜欢的specificObservable。 – alehro