BirdクラスとBirdMorphクラスがあるとしましょう。鳥には位置があり、対応する鳥の位置が変わるたびに、BirdMorphsが画面上の位置を変更するようにします。
モーフをモーフィックで視覚化することになっているオブジェクトに接続するための意図された方法は何ですか?
通常、BirdMorphはインスタンス変数にBirdを保持し、メソッド内の自身の位置を更新しますstep
。
このように考えてください。すべてのオブジェクトをどこかに「保持」する必要があります。参照がない場合は、自動的にガベージコレクションされます。Morphicでは、その参照は通常、に基づいておりWorld
、すべてのモーフはそのコンテナのsubmorphs
コレクションを介して参照されます。
したがって、モーフが「ドメインモデル」を保持することは理にかなっています。たとえば、すべてのBirdsを保持するオブジェクトBirdSimulationと、BirdSimulationを保持する画面上のウィンドウがあるとします。次に、ウィンドウを閉じると、シミュレーションオブジェクトも消えます。
プログラムが主にビジュアルである場合は、個別のBirdクラスも必要ない場合があります。代わりに、モーフは単に「鳥」である可能性があります。これにより、設計を大幅に簡素化できます。
私見あなたの最初の考えは正しかった:MVCは行く方法です。BirdMorphからBirdモデルへの参照を保持するのがこれを行う最も簡単な方法のようですが、 Observerパターン を使用すると、BirdMorphはBirdの「オブザーバー」になります。BirdMorphは、作成時にBirdに登録され、それぞれに通知されます。イベント。鳥が動くときはいつでも、それはすべての観察者に彼の動きを通知します。したがって、Birdに複数のオブザーバーを設定できます。たとえば、表示用に1つのモーフ(位置など)、ロギング用に1つ(例としてネットワークピアに)など...コード内の「ハード」参照が少なくなり、spagethiが少なくなります。
多くのフレームワークは、オブジェクト間の依存関係を壊し、多くを単純化するため、このパターンに基づいて構築されています。