ホームページ  >  記事  >  バックエンド開発  >  PHP設計パターンにおけるオブザーバーパターンの適用の詳細説明_PHPチュートリアル

PHP設計パターンにおけるオブザーバーパターンの適用の詳細説明_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:10:20704ブラウズ

オブザーバー パターン: オブジェクト間の 1 対多の依存関係を定義します。オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます。
Observer クラス:
1. 抽象トピック ロール: トピック ロールは、オブザーバー オブジェクトへのすべての参照をコレクションに保存し、各トピックは必要な数のオブザーバーを持つことができます。抽象テーマは、オブザーバー オブジェクトを追加および削除するためのインターフェイスを提供します。
2. 抽象オブザーバーの役割: すべての特定のオブザーバーのインターフェイスを定義し、観察の主体が変化したときに自身を更新します。
3. 特定のトピックの役割: 特定の主体の内部状態が発生したときに、関連する状態を特定のオブザーバー オブジェクトに保存します。 、登録されているすべてのオブザーバーに通知が送信されます。具体的なテーマの役割は、通常、具体的なサブクラスを使用して実装されます。
4. 特定のオブザーバーの役割: 特定のサブジェクト オブジェクトを保存し、関連する状態を保存し、独自の状態をサブジェクトの状態と一致させるために必要な更新インターフェイスを実装します。 . オブザーバーモードのカップリングは小さいです
2. ブロードキャスト通信をサポートします
コードをコピーします

コードは次のとおりです:


// 抽象主题
interface Subject{
public functionattach($observer);
public function detach($observer);
public function NoticeObservers();
}
// 特定の主题
class ConcreateSubject Subject{
private $_observers;
public function __construct(){
$this->_observers = array();
}

public functionattach($observer){
return array_push($this->_観察者、 $observer);
}

public function detach($observer){
$index = array_search($observer,$this->_observers);
if($index === false || !array_key_exists($index, $this->_observers)){
return false;
}
unset($this->_observer[$index]);
return true;
}

public function Noticeオブザーバー(){
if(!is_array( $this->_observers)){
return false;
}
foreach($this->_observers as $observer){
$observer->update();
}
trueを返す;
}
}

//抽象観察者
interface Observer{
public function update();
}
// 具体的な観察者
class ConcreteObserverimplement Observer{
private $_name;
public function __construct($name){
$this-> ;_name = $name;
}

public function update(){
echo 'Observer',$this->_name.' が通知しました
';
}
}

//客户端
class Client{
public static function main(){
$subject = new ConcreteSubject();
//新增第一观観察者
$observer1 = new ConcreteObserver('Martin');
$subject->attach( $observer1);
// 通知
$subject->notifyObservers();

// 新增第二観察者
$observer2 = new ConcreteObserver('jaky' );
$subject->attach($ observer2);
// 通知
$subject->notifyObservers();

//删除観察者1
$subject->deatch($observer1);
// 通知
$subject->notifyObservers() ;
}
}

Client::main();
?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327124.html技術記事オブザーバー パターン: オブジェクト間の 1 対多の依存関係を定義します。オブジェクトの状態が変化すると、そのオブジェクトに依存するすべてのオブジェクトが通知され、自動的に更新されます。 オブザーバークラス...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。