ホームページ >php教程 >php手册 >PHPデザインパターン Observer(オブザーバーパターン)

PHPデザインパターン Observer(オブザーバーパターン)

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:54:181059ブラウズ

复制代码代码如下:


/**
* オブザーバー パターン
*
* オブジェクト間の 1 対多の依存関係を定義します。これにより、オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます
* ターゲット オブジェクトのステータスを表示するオブジェクトを簡単に作成し、コア オブジェクトから切り離された特定の機能を提供する機能
* プラグイン システム
*/
クラス Observerable
{
private $_observers = array();

public function registerObserver($observer)
{
$this->_observers[] = $observer;
}

public function RemoveObserver($observer)
{
$key = array_search($observer,$this->_observers);
if(!($key === false))
{
unset($this->_observers[$key]);
}
}

public function NoticeObservers()
{
foreach($this->_observers as $observer)
{
if($observer instanceofオブザーバー) $observer->update($this);
}
}
}

インターフェース オブザーバー
{
public function update($observer);
}

interface DisplayElement
{
public function display();
}

// -- 例定義
class NewsObserverable extends Observerable
{
private $_sports_news;
パブリック関数 setSportsNews($data)
{
$this->_sports_news = $data;
$this->notifyObservers();
}

public function getSportsNews()
{
return $this->_sports_news;
}

プライベート $_local_news;
パブリック関数 setLocalNews($data)
{
$this->_local_news = $data;
$this->notifyObservers();
}

public function getLocalNews()
{
return $this->_local_news;
}
}

クラス SportsNews 実装 Observer,DisplayElement
{
private $_data = null;
パブリック関数 update($observer)
{
if($this->_data != $observer->getSportsNews())
{
$this->_data = $observer->getSportsNews();
$this->display();
}
}

public function display()
{
echo $this->_data.date("Y-m-d H:i:s")."
";
}
}

class LocalNews 実装 Observer,DisplayElement
{
private $_data = null;
パブリック関数 update($observer)
{
if($this->_data != $observer->getLocalNews())
{
$this->_data = $observer->getLocalNews();
$this->display();
}
}

public function display()
{
echo $this->_data.date("Y-m-d H:i:s")."
";
}
}

// -- 例化 ---

$objObserver = new NewsObserverable();
$local = new LocalNews();
$sports = new SportsNews();

$objObserver->registerObserver($local);
$objObserver->registerObserver($sports);

$objObserver->setSportsNews("スポーツ ニュース 1 ");
$objObserver->setLocalNews("ローカル ニュース 1 ");
$objObserver->removeObserver($sports);
$objObserver->setLocalNews("ローカル ニュース 2 ");
$objObserver->setSportsNews("スポーツ ニュース 2 ");
$objObserver->removeObserver($local);
$objObserver->setLocalNews("ローカル ニュース 3 ");



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。