PHP 觀察者模式的實現(xiàn)代碼
代碼如下所示:
//被察者抽象類
class Observed implements SplSubject{
protected $_name;
protected $_observers;
//實例化,生成一個觀察者對象
public function __construct(){
$this->_observers = new SplObjectStorage();
}
// 添加觀察者對象
public function attach(SplObserver $observer){
$this->_observers->attach($observer);
}
//刪除觀者對象
public function detach(SplObserver $observer){
$this->_observers->detach($observer);
}
//通知消息
public function notify(){
foreach($this->_observers as $observer){
$observer->showMessage($this);
}
}
//普通方法: 設(shè)置值
public function setName($name){
$this->_name = $name;
$this->notify();
}
//普通方法: 獲取值
public function getName(){
return $this->_name;
}
//普通方法:設(shè)置年齡
public function setAge($age){
$this->age = $age;
foreach($this->_observers as $observer){
$observer->showAge($this->_name,$this->age);
}
}
}
// 觀察者抽象類
class Observer implements SplObserver{
//顯示消息提示
public function showMessage(SplSubject $obj){
$user = $obj->getName();
if($user==='admin'){
echo '您好, ',$user,'歡迎您進入管理后臺<br/>';
}else{
echo "你好, '$user' 你已經(jīng)被添加到了用戶列表<br/>";
}
}
//這是繼承父類的抽象方法
public function update(SplSubject $subject) {}
//顯示個人年齡
public function showAge($name,$age){
echo "<script>alert('$name 的年齡是: $age')</script>";
}
}
$subject = new Observed(); //生成一個被觀察者對象
$observer = new Observer(); //生成一個觀察者對象
$subject->attach($observer);//把觀察者傳入到被觀察中去
$subject->setName('張三'); //調(diào)用 setName 方法
/*
* 通過面的 setName 就會調(diào)用 $this->notify();
* 通過調(diào)用 $this->notify()就會調(diào)用 $observer->showMessage($this)方法,
* 即每個觀察者對象的 showMessage($obj)方法;
*/
$subject->setName('admin');
$subject->setAge(24);
相關(guān)文章
PHP抽象工廠模式Abstract Factory Pattern優(yōu)點與實現(xiàn)方式
這篇文章主要介紹了PHP抽象工廠模式Abstract Factory Pattern優(yōu)點與實現(xiàn)方式,抽象工廠模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建一系列相關(guān)或相互依賴對象的最佳方式2023-03-03
Smarty模板學(xué)習(xí)筆記之Smarty簡介
Smarty是一個使用PHP寫出來的模板PHP模板引擎,是目前業(yè)界最著名的PHP模板引擎之一。它分離了邏輯代碼和外在的內(nèi)容,提供了一種易于管理和使用的方法,用來將原本與HTML代碼混雜在一起PHP代碼邏輯分離。2014-05-05
javascript+php實現(xiàn)根據(jù)用戶時區(qū)顯示當(dāng)?shù)貢r間的方法
這篇文章主要介紹了javascript+php實現(xiàn)根據(jù)用戶時區(qū)顯示當(dāng)?shù)貢r間的方法,實例分析javascript獲取客戶端時區(qū)及與服務(wù)器端php交互的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
php將從數(shù)據(jù)庫中獲得的數(shù)據(jù)轉(zhuǎn)換成json格式并輸出的方法
今天小編就為大家分享一篇php將從數(shù)據(jù)庫中獲得的數(shù)據(jù)轉(zhuǎn)換成json格式并輸出的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
PHP中的str_repeat函數(shù)在JavaScript中的實現(xiàn)
PHP中有一個函數(shù):String str_repeat($str, num);挺好用的,在 本文為大家介紹下次函數(shù)在js中的實現(xiàn),感興趣的朋友可以參考下2013-09-09

