はじめに
今回はUnityでObserverパターンを試してみる記事です。
UniRxを支える基礎概念として、Observaerパターンがあります。普段はUniRxを使っているので、マスターした気になっていますが、あまり触れたことがなかったので、試しに触れたいと思います。
サンプルプロジェクト
そもそもObserverパターンとは
GoFの設計パターンの一つで、イベント周りで多く利用される。構成としては、Observer(監視者・発行)とSubject(観察対象・購読)に分かれていて、Subject側がメッセージを発信することで、Observerで登録した処理を実行する仕組み。ざっくりいうと、通知を受け取る仕組みと理解しても大丈夫です。
単純に実装してみる
単純ですが実際に実装してみました。SPACEキーを押すと、ランダムな値をログに出力します。
giste572ccf800f4a5058c6668536c573338
gistd0d73954f645e24a1c0fc27bbf415725
IObservableを利用してみる
今度は、Observerパターンで使えるインターフェースを使って実装してみようと思います。使うインターフェースは以下のとおりです。
・IObserver:メッセージを受け取る際に必要
gistd4bde29a269cb492de342064402639fe
・IObserveble:メッセージの送り先であるObserverを登録
gistf2fefc836a4ab00061a394c2e9e5cbd5
・IDisposable:リソースを削除するのに必要
gist362ddb192286e969685dbe4daaf70b1f
Subjectは複数の購読を受けることができるので、Observerを複数作ってメッセージを発行できるようにしました。また、購読解除はSubscribeの戻り値をとおして行えるようになっています。
giste7371a22062a0d98f9d31010ff1a0310
gistba48f69a1ea1db5aa04b4917a4b55500
giste41f3a19584b28408e47e04a67948c42
ちなみに冒頭でObserverとSubjectの説明をしましたが、正確に云うとSubjectはIObservableインターフェースを実装しているオブジェクトで、ObserverがIObserverを実装しているオブジェクトになります。
UniRxのSubjectを試してみる
自前で色々実装してきましたが、UniRxには楽にSubjectを実装できるSubjectが用意されています。なので実際に使ってみましょう!
gist2e91348cfd24f846607c3039033496d6
これはボタンを押すと通知を出して、登録された処理を実行するかんじ。簡単に実装出来てめちゃくちゃ便利!
UniRxにはよく使われるベストプラクティスなObservableがあります。
gist76f5eeeed82a976fd33cbd3532693066
gisteeeab1038a8429cad2e60bcd5dc2f15d
ちなみにUniRxではSubjectのことをObservableと呼ぶことがありますが、それはSubjectにUniRxの機能であるOperatorとSchedulerが加わったもののことを指します(ストリームとも呼ばれる)。また、そのパターンをObservableパターンとも呼ぶみたいです。
おわりに
今回はObserverパターンをいろんな方法で試してみました。UniRxかなり便利でしたね!次は、Singletonパターンを実装してみようと思います。
是非、読者登録をしていただくと助かります!