2011-07-31 10 views
1

2人の子供が同じ親を持つ場合、1人の子供からのイベント発射はどのように2番目の子供によって処理されますか。2つのオブジェクトがどのように通信するか(例の内部)

ので例は次のとおりです。

TrackerContainerはトラッカーとTrackerPanelの親です。 TrackerPanelはPlayButtonの親です。トラッカーはタイマーのようなクラスで、stop()メソッドがあります。 PlayButtonにはactivate()メソッドとdeactivate()メソッドがあります。

Tracker内からstop()メソッドを呼び出すと、PlayButton()内のdeactivate()メソッドがどのように呼び出されますか?私はTrackerContainerクラスで発生したトラックを追跡することを考えましたが、それは正しいとは思いません。

EDITは、ここでは、(方法によっては、JavaScript)コードである:

function TrackerContainer 
{ 
    this.display = new Tracker(); 
    this.panel = new TrackerPanel(); 
} 

function Tracker 
{ 
    this.play = function() { /* yada */ } 
    this.stop = function() { /* yada */ } 
} 

function TrackerPanel 
{ 
    this.playButton = new PlayButton(); 
} 

function PlayButton 
{ 
    this.activate = function() { /* method called when Tracker is playing */ } 
    this.deactivate = function() { /* method called when Tracker is stopped */ } 
} 
+0

これを詳しく説明できますか?あなたが持っていればポストコード/擬似コード? –

答えて

1

言語を指定していないため、一般的な言葉で話します。これはModel-View-Controllerパターンです。あなたのPlayButtonはビューです。あなたのトラッカーはモデルであり、TrackerContainerはコントローラーです(私は推測しています;ビューの場合もありますが、別のコントローラーオブジェクトが必要です)。

ビューの仕事は物事を表示することです。モデルの仕事はデータを追跡しています。コントローラーは2つの間を調整します。

この問題では、おそらくオブザーバーパターンが必要です。コントローラはモデルを観察し、必要に応じてビューを更新します。 Observerパターンを実装する1つの方法は、デリゲートまたはリスナーを使用する方法です。 trackerDidStart()trackerDidStop()のような方法で、TrackerListenerというTrackerContainerという名前のインターフェイスを作成します。 Tracker HAS-A TrackerListenerとなり、状態が変わるたびにリスナー・メソッドを呼び出します。 TrackerContainerはボタンの状態を更新します。

1

最も簡単な解決策は、トラッカーにのplayButtonのインスタンスを通過することであろう。トラッカーはstop()playbutton.deactivate()となります。あなたがもっと慣れ親しんでいるように感じるなら、PlayButtonはDeactivatibleインターフェイスを実装することができます。

関連する問題