Mix-inによりobserverパターンを提供する。
Observableモジュールをincludeしたクラスは Observable#changedメソッドにより更新フラグを立て、 Observable#notify_observers()が呼び出されると 更新フラグが立っている場合はオブザーバに通知する (オブザーバのupdateメソッドを呼び出す)。 Observable#notify_observers()の引数は そのままオブザーバのupdateメソッドに渡される。
require 'observer' class AObservable include Observable ... end class AObserver def update(arg) ... end ... end obj = AObservable::new observer = AObserver::new obj.add_observer(observer) obj.changed obj.notify_observers(args)
Observable#add_observer(observer)
オブザーバを追加する。
オブザーバはupdate
メソッドを備えている必要がある。
observerがupdate
メソッドを持たないときは
例外NoMethodErrorを発生する。
Observable#delete_observer(observer)
オブザーバを削除する。
Observable#delete_observers
オブザーバをすべて削除する。
Observable#count_observers
オブザーバの数を返す。
Observable#changed(state=true)
更新フラグを立てる。
Observable#changed?
更新フラグの状態を返す。
Observable#notify_observers(*arg)
更新フラグが立っていたら、オブザーバのupdate
メソッドを呼び出す。
与えられた引数はそのupdate
メソッドに渡される。
更新フラグはfalse
になる。