php設計模式之觀察者模式的應用詳解

來源:互聯網
上載者:User

觀察者模式:定義對象間一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並自動更新。
觀察者類:
1.抽象主題角色:主題角色將所有對觀察者對象的引用儲存在一個集合中,每個主題可以任意多個觀察者。抽象主題提供了增加和刪除觀察者對象的介面。
2.抽象觀察者角色:為所有的具體觀察者定義一個介面,在觀察的主題發生改變時更新自己
3.具體主題角色:儲存相關狀態到具體觀察者對象,當具體主題的內部狀態發生改變時,給所有登記過的觀察者發出通知。具體主題角色通常用一個具體子類實現。
4.具體觀察者角色:儲存一個具體主題對象,儲存相關狀態,實現抽象觀察者角色所要求的更新介面,以使得其自身狀態和主題的狀態保持一致
作用:
1. 觀察者模式的耦合度較小
2.支援廣播通訊 複製代碼 代碼如下:<?php
//抽象主題
interface Subject{
public function attach($observer);
public function detach($observer);
public function notifyObservers();
}
//具體主題
class ConcreateSubject implements Subject{
private $_observers;
public function __construct(){
$this->_observers = array();
}

public function attach($observer){
return array_push($this->_observers,$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 notifyObservers(){
if(!is_array($this->_observers)){
return false;
}
foreach($this->_observers as $observer){
$observer->update();
}
return true;
}
}

//抽象觀察者
interface Observer{
public function update();
}
//具體觀察者
class ConcreteObserver implement Observer{
private $_name;
public function __construct($name){
$this->_name = $name;
}

public function update(){
echo 'Observer',$this->_name.'has notified<br/>';
}
}

//用戶端
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();
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.