バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.


RWModel

形式

#include <rw/model.h>
(抽象基底クラス)

説明

この抽象基底クラスは、モデル・ビュー・コントローラ・アーキテクチャの「モデル」部分を実装するために設計されています。「ビュー」部分を実装するのは、関連クラス RWModelClient です。

このクラスは、依存する RWModelClient オブジェクトのリストを保持します。メンバー関数 changed(void*) が呼び出されると、このリスト全体を走査し、各オブジェクトに対してそのオブジェクト自身を第 1 引数として updateFrom(RWModel*, void*) を呼び出します。RWModelClientのサブクラスが、この呼び出しを受け入れます。

持続性

なし

次の例は不完全で、関連するクラスを完全には定義していません。ダイヤル (Dial) は サーモスタット (Theromostat) の内部設定値をグラフィックスで表現したものとみなされます。サーモスタットとダイヤルとの間に依存関係があることが重要な点で、サーモスタットの設定値が変わると、ダイアルに通知します。ダイアルは通知を受け取ると、自分自身を更新してサーモスタットの新しい設定値を反映します。

#include <rw/model.h>
class Dial : public RWModelClient {
public:
  virtual void   updateFrom(RWModel* m, void* d);
};

class Thermostat : public RWModel {
  double setting;
public:
  Thermostat( Dial* d )
    { addDependent(d); }
  double temperature() const
    { return setting; }
  void setTemperature(double t)
    { setting = t; changed(); }
};

void Dial::updateFrom(RWModel* m, void*) {
  Thermostat* t = (Thermostat*)m;
  double temp = t->temperature();
  // グラフィックスを再描画する
}

公開コンストラクタ

RWModel();

特殊化クラスから呼び出されると、依存するオブジェクトを内部的に順序付けたリストを準備します。

公開メンバー関数

void
addDependent(RWModelClient* m);

オブジェクト m を、自分自身の依存オブジェクトリストに追加します。

void
removeDependent(RWModelClient* m);

自分自身の依存オブジェクトリストからオブジェクト m を取り除きます。

virtual void
changed(void* d);

依存オブジェクトの内部リスト全体を走査し、各オブジェクトに対して自分自身を第 1 引数、d を第 2 引数としてメンバー関数 updateFrom(RWModel*, void*) を呼び出します。