オブザーバーパターンを支援する Observable クラス(Subject/Publisher側)
オブザーバーパターンを支援する Observable クラス(Subject/Publisher側).Observable は Observer へ自身の変化の通知する. Model-View で Model 側を演じるオブジェクトがこのクラスを継承する.
1つの Observable は複数の Observer を持つことができる.Observable の内部状態が変化したとき,アプリケーションは notifyObservers メソッドを よぶことによって,Observer の update を間接的に起動する.
通知の順序は規定されていない.
登録された Observer の delete(デストラクタ呼び出し) については, 基本的にはアプリケーションの責任とするが,明示的に destroyObservers を 呼ぶことで全 Observer に対して delete を呼び出すことができる.
[ロック方針]
このクラスは,マルチスレッドに関するロックを全く意識しない. 必要であれば TJSafeObservable を見よ.
Observer の delete (デストラクタ呼び出し)は行わない. [note]
java.util.Observable の deleteObserver というネーミングは
C++ の delete 演算子 を連想させる名前なので,removeObserver とした.
const メソッドではないのは意図的である.このメソッドの中で呼ばれる
Observer 側の update で,この Observable の non-const メソッドを
呼べるようにしている.
変化は setChanged で設定でき,hasChanged によって検知され,clearChanged
によってリセットすることができる.
このメソッドは,observer の update を呼び出す.
その際の第2引数は,このメソッドに渡される arg である. const メソッドではないのは意図的である.このメソッドの中で呼ばれる
Observer 側の update で,この Observable の non-const メソッドを
呼べるようにしている.
基本的に Observer の delete はアプリケーションの責任とするが,
アプリケーションがObserver 列の管理をしたくない場合,このメソッド
が delete を支援する.
Observer が自動変数の場合は,当然これを使用してはならない.
Observer のデストラクタは呼び出さないことに注意.
このクラス自身では false である.
Observer が notifyObservers を行う際,このメソッド
の返り値に応じて update/safeUpdate を呼び分ける.
virtual void addObserver(TJObserver* o)
virtual void removeObserver(TJObserver* o)
virtual void removeObservers()
virtual void notifyObservers()
hasChanged()
update()virtual void notifyObservers(void* arg)
hasChanged()
update()virtual bool hasChanged() const
setChanged()virtual unsigned countObservers() const
virtual void destroyObservers() const
virtual ~TJObservable()
virtual bool isSafe() const
virtual bool hasObserver(const TJObserver* o) const
virtual void setChanged()
virtual void clearChanged()
索引(アルファベット順) HTMLクラス継承 または Java