2011-06-26 4 views
1

こんにちは(私の友人)は、将来のシステムで別の方法で通知したい異なるソース(wikiコンテンツ、フォーラムコメント、ドキュメントアップロード、RSSソース...)を持っています出典:Javascript LIVE PUSH(APE)、メール、SMS、電話、RSS ...オブザーバーパターンの使用:update()メソッド

私たちの実装のためのGoF Observerデザインパターンについて考えてみましょう。 Observerデザインパターンは、これを実現する良い方法ですか?

メッセージをフォーマットするためのコードを通知する(例1を参照)と考えていますが、メッセージを作成するためにステータスをObservableに返す必要があります(例2を参照)。 パターンに関しては良い練習ですか?

「はい」の場合、update()(デフォルトのObserverデザインパターンメソッド)の「実際の役割」は何ですか?私たちは本当にそれを取得しません。

我々はウェブ(更新のための()の実装)でこの例を発見した

1) http://gbenoit79.blogspot.com/2011/04/design-pattern-observer.html

<?php 
(...) 
class ConcreteObserverA implements SplObserver 
{ 
    public function update(SplSubject $subject) 
    { 
     echo 'ConcreteObserverA received: ' . $subject->getVariable() . "\n"; 
    } 
} 
(...) 

2) http://www.minte9.com/kb/php-observer-pattern-example-php-programming-advanced-i1365

<?php 
(...) 
    class DriverObserver implements Observer{ 
    public function update(Observable $subject) { 
     if ($subject->driven_hours >= 8) { 
     $subject->need_sleep = 1; 
     } else { 
     $subject->need_sleep = 0; 
     } 
    } 
    } 
(...) 

彼らは両方VALIDSていますか?

答えて

1

Observerパターンが良い解決策であるかどうかは、詳細がわかりませんが、それは有効なものかもしれません。 オブザーバーは、サブジェクトと呼ばれる他のオブジェクトを観察するオブジェクトです。一部の主体で変更が発生すると、その状態の更新についてオブザーバーに通知します。 あなたの例に: あなたの主題はwikiの内容、フォーラムのコメント、ドキュメントのアップロード、RSSソース...あなたのオブザーバーはJavascript LIVE PUSH(APE)、メール、SMS、電話、RSS ... あなたは要約Observerオブジェクトのコレクションを保持する必要があるサブジェクト、そのコレクションに追加するメソッド、そのオブジェクトから削除するメソッド、およびどのオブザーバに通知するかを選択するいくつかのメソッドがあります。 Observableの具体的な実装は、いくつかのメッセージデータを引数として選択されたオブザーバに対してupdateを呼び出すよりも簡単です。件名が更新されるときに呼び出される更新メソッドを持つObserverインターフェイスが必要です。具体的な実装では、更新メソッドが電子メールを送信したり、Webにプッシュしたり、登録を取り消したりします。 これをコード化した後、オブザーバーを作成し、サブジェクトにオブザーバーを追加することで、コミュニケーションを初期化します。

関連する問題