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になる。