2016-07-28 7 views
0

Ich versuche, einen Proxy für meine Modelle mit RxJava zu erstellen, dieser Proxy lässt andere für Änderungen im Modell abonnieren.PublishSubject on fireNext wenn abonniert

Hier ist eine vereinfachte Version meiner Proxy:

class MyModelProxy { 
    private static MyModelProxy instance; 

    private MyModel model; 
    private PublishSubject<MyModel> subject; 

    private MyModelProxy() { 
     this.model = // load from cache 
     this.subject = PublishSubject.create(); 
    } 

    public static Observable<MyModel> observe() { 
     if (instance == null) { 
      instance = new MyModelProxy(); 
     } 

     return instance.subject; 
    } 

    private void modelUpdated() { 
     this.subject.onNext(this.model); 
    } 
} 

Es gibt nur eine Instanz von MyModel im System, aber es könnte im Laufe der Zeit ändern, und so mag ich für dieses Updates registrieren können.
Dieser Code funktioniert gut, wenn ich auf der Observable von der observe Methode vor dem Aufruf der onNext des Betreffs registriert registrieren.

Das Verhalten, das ich will, ist, dass, wenn die subscribe Methode für diesen Beobachter aufgerufen wird, die aktuelle Instanz von MyModel an den Abonnenten gesendet wird, der gerade abonniert hat.

Ich dachte über die PublishSubject erstreckt, aber es ist mein letztes Wort, also dachte ich über meine eigene Version davon zu schreiben (vor allem durch das Kopieren, was in PublishSubject ist und das Hinzufügen, was ich brauche), aber dann fand ich heraus, dass SubjectSubscriptionManager Paket Sichtbarkeit hat, so dass ein ist Sackgasse auch.

Irgendwelche Ideen, wie ich diese benötigte Funktionalität hinzufügen kann?
Danke.

Antwort

1

Es gibt auch BehaviorSubject, das ist genau das tut, was Sie wollen: aussendet neuesten und alle zukünftigen Produkte an seine Abonnenten

+0

Richtig. Dank dafür! –