一.觀察者模式特點
解釋:觀察者模式(Observer),當一個對象的狀態發生改變時,依賴他的對象會全部收到通知,並自動更新。
場景: 一個事件發生後,要執行一連串更新操作.傳統的編程方式,就是在事件的代碼之後直接加入處理邏輯,當更新得邏輯增多之後,代碼會變得難以維護.這種方式是耦合的,侵入式的,增加新的邏輯需要改變事件主題的代碼,而觀察者模式實現了低耦合,非侵入式的通知與更新機制
二.代碼要點
1. 代碼分爲兩部分,事件部分,和觀察者部分
2. 事件部分要用到註冊樹模式中的註冊功能,把觀察者對象註冊到事件類的成員變量中去。
//事件基礎類
abstract Class EventBase
{
private $objectList;
//把對象註冊到成員變量中
public function add($object)
{
$this->objectList[] = $object;
}
//事件通知
public function notify($even_info)
{
//遍歷並調用觀察者類中的update方法
foreach ($this->objectList as $k=>$object){
$object->update($even_info);
}
}
}
//觀察者接口
interface ServerInterFace
{
public function update($even_info=null);
}
//觀察者類
Class Server implements ServerInterFace
{
public function update($even_info=null)
{
echo $even_info;
echo '收到,立馬執行!';
}
}
//觀察者類
Class Server2 implements ServerInterFace
{
public function update($even_info=null)
{
echo $even_info;
echo '收到,立馬執行!';
}
}
//具體事件
Class LoginEvent extends EventBase
{
}
//登錄事件
$loginEvent = new LoginEvent();
//爲登錄事件添加觀察者
$loginEvent->add(new Server);
$loginEvent->add(new Server2);
$loginEvent->notify('登錄成功,請設置好相關信息');