はじめに
オブザーバー パターンはオブジェクトの 1 対多の依存関係を定義するため、オブジェクトの状態が変化すると、そのすべての依存関係が通知され、自動的に更新されます。
設計原則
オブザーバー In モードでは、変化するのは被験者のステータスと観察者の数です。このパターンを使用すると、テーマを変更せずに、テーマの状態に依存するオブジェクトを変更できます。 ——プログラムの変化する側面を見つけ出し、それを固定的な側面から分離します。
サブジェクトとオブザーバーの両方がインターフェースを使用します。オブザーバーはサブジェクトに登録するためにサブジェクトのインターフェースを使用し、サブジェクトはオブザーバーを使用します。インターフェース オブザーバーに通知します。これにより、疎結合の利点を活かしながら、これら 2 つが正常に動作するようになります。 ——実装プログラミングではなく、インターフェース プログラミングの場合です。
オブザーバー パターンは、「合成」を使用して、多くのオブザーバーを 1 つのテーマに結合します。オブジェクト (オブザーバー - サブジェクト) 間のこの関係は、継承ではなく、実行時の合成によって生成されます。 ——より多くの組み合わせを使用し、継承を減らします。
コード
コードをコピー コードは次のとおりです:
/**
* オブザーバーパターン
* @作成者: Mac
* @日付: 2012/02/22
* /
class Paper{ /* トピック*/
private $_observers = array();
public function register($sub){ /* オブザーバーの登録*/
$this-> ;_observers [] = $sub;
}
public functiontrigger(){ /* 外部統合アクセス*/
if(!empty($this->_observers)){
foreach( $this ->_observers as $observer){
$observer->update();
}
}
}
/**
* オブザーバーによって実装されるインターフェース
*/
インターフェース Observerable{
public function update();
クラス サブスクライバーは Observerable{
public function update(){
echo "Callbackn";
を実装します。 >}
//以下はテストコードです
?
/* Test*/
$paper = new Paper();
$paper->register(new Subscriber() );
//$paper->register(new Subscriber1());
$paper->trigger();
概要
新しいオブジェクトを入力する場合、そのオブジェクトをサブジェクト (オブザーバブルとも呼ばれます) に登録するだけで済みます (さまざまな方法があります)登録することもできます。構築中に登録することも、フレームワークによってアクセスされるインターフェイスに登録することもできます)、新しいオブジェクトのインターフェイスにコードを直接実装します。これにより、被写体と観察者のオブジェクト間の結合が減少します。