前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

CallbackとListenerとObserverの違い

※2013/12/25に加筆修正

Android APIを見ていると「--Callback」、「--Listener」、「--Observer」などの名前のInterfaceがある。

どれも似たような役割のインターフェースで結局のところ全部コールバックに属すると思うんだけど、どうにも違いが分かりにくいので整理。

海外のトピック「what is the difference between callbacks and listeners?」によると
http://programmers.stackexchange.com/questions/84732/what-is-the-difference-between-callbacks-and-listeners

  • Callbackは特定の処理が完了したらバケットのある関数を呼ぶのでその関数に接続する必要がある。
  • Listenerはある物事が発生したらイベントを送信するのでそれを受け取るかどうかはあなた次第だ。
  • Callbackは1つだけ登録
  • Listenerは複数登録できる(ただしAndroidなど実装によってはその限りではない)

ということらしい。翻訳が怪しいのでなんともすっきりしないが、
これらを踏まえつつ言葉の意味から自分なりのイメージで考えてみる。

  • 電話をかけ返して欲しい(Callback)なら番号渡して連絡待ち。
    「写真を取る」などの能動的な処理が完了したあとでCallbackインターフェースに定義されたメソッドが呼ばれる
  • 聴取者(Listener)はメルマガに登録して連絡待ち。
    「画面がタッチされた」などの受動的に発生したイベントに応じてListenerインターフェースに定義されたメソッドが呼ばれる
  • 観察者(Observer)なら研究者になったつもりで対象物の状態の変化を観察。
    「バッテリー残量が少なくなってきた」など、(既に存在する)オブジェクトの状態が変化したタイミングでイベントを送信。Observerインターフェースに定義されたメソッドが呼ばれる

まとめると

  • なんらかの処理の完了時に呼ばれるのがCallBack
  • なんらかのイベント発生時に呼ばれるのがListener
  • 状態の変更時に呼ばれるのがObserver

ってとこか。CallbackとListenerは能動的行為の完了通知か受動的行為の受信通知かの違いと覚えておこう。