RxJavaを使ってみて、便利だということは分かったし、何となくぼやーっと頭の中でどういうものなのかは理解できたけど、人に説明するとなると、どう説明すればいいのかイマイチ分からない...
そんなきっかけで、自分がReactiveXを人に説明できるようにするために、メモ書きを残すことにしました。
今回はその第1弾として、"Observer"と"Observable"をどう説明すればいいのか考えてみます。
Observer
Observerって何?ってことですが、その前にまずはReactiveXのページを見てみます。
http://reactivex.io/
2015/12/14時点で、ページ内には以下のように書かれています。
ReactiveX is a combination of the best ideas from
the Observer pattern, the Iterator pattern, and functional programming
つまり、「ReactiveXはObserverパターン、Iteratorパターン、ファンクショナルプログラミングの最高のアイディアを組み合わせたモノだよ」って言ってますね。
このうち、ちょっとObserverパターンがどういったモノか見てみると...
https://ja.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
Observer パターン(オブザーバ・パターン)とは、プログラム内のオブジェクトの状態を観察(英: observe)するようなプログラムで使われるデザインパターンの一種。
と書かれています。
また、上記のWikipediaにもありますが、Observerは
Subject からの更新通知を受け取る更新(英: update)インタフェースを定義するクラス。
と書かれています。
それを踏まえた上で、RxJavaのObserverを見てみると...
https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/Observer.java
この中で定義されているインターフェースは、onCompleted、onError、onNextの3つです。
これらは、Observableをsubscribeするときに実装するメソッドで、それぞれObservableの中のロジックが終了したとき、処理中にエラーイベントが発生したとき、Observableからデータが引き渡されるときにそれぞれObservableから呼び出されます。
ここまで来ると、なんとなく上のObserverパターンと繋がってきたような気がします。
つまり、ReactiveXにおけるObserverは「Observableからのイベント通知を受け取るインターフェース」と言えそうです。
Observable
じゃあ今度はそのObservableって何だよって話ですが、これはReactiveXにページがあるのでそこを見てみます。
http://reactivex.io/documentation/observable.html
冒頭に
In ReactiveX an observer subscribes to an Observable.
「ReactiveXでは、observerはObservableを購読するよ」って書いてあるので、Observerについてはさっきの認識で良さそうです。
で、Observableについてはその次に
Then that observer reacts to whatever item or sequence of items the Observable emits.
「そして、observerはObservableが発行するどんなアイテムやシーケンスのアイテムにも反応します」と書いてあります。
つまり、Observableはザックリと「イベントを発行する元ネタを持ってるクラス」みたいな感じで言えそうですね。
つまり
ObserverとObservableは、それぞれ「Observableからイベント通知を受け取るインターフェース」と、「イベントを通知するクラス、とそのイベント通知に必要なロジック」という感じに説明できそうです。
また一つ賢くなった。