复制代解答代打如下:
/**
* オブザーバーパターン
*
* オブジェクト間の 1 対多の依存関係を定義します。これにより、オブジェクトの状態が変化すると、それに依存するすべてのオブジェクトが通知され、自動的に更新されます
* 簡単に作成できます 表示するオブジェクトターゲットオブジェクトのステータスを取得し、コアオブジェクトから切り離された指定された機能を提供します
* プラグインシステム
*/
class Observerable
{
private $_observers = array();
パブリック関数 registerObserver($observer)
{
$this->_observers[] = $observer;
}
パブリック関数removeObserver($observer)
{
$key = array_search($observer,$this->_observers);
if(!($key === false))
{
unset($this->_observers[$key]);
}
}
public function NoticeObservers()
{
foreach($this->_observers as $observer)
{
if($observerinstanceofObserver) $observer->update($this);
}
}
}
インターフェースオブザーバー
{
public function update($observer);
}
インターフェース DisplayElement
{
パブリック関数 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")."
";
}
}
クラス 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 = 新しい LocalNews();
$sports = 新しいスポーツニュース();
$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 ");
http://www.bkjia.com/PHPjc/323800.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/323800.html技術記事例: ?php /** * 観察者モード * * オブジェクトの 1 つを定義し、複数の依存関係を定義し、1 つのオブジェクトの状態が変更されると、すべてのオブジェクトが依存します...