# 觀察者模式
* * * * *
說明:
> 觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象可以同時監聽某一個主題對象,這個主題對象在發生狀態變化時,會通知所有觀察者對象,使它們能夠自動更新自己,解決的是“當一個對象的改變需要同時改變多個其他對象”的問題
適用場景:
>1、 當一個抽象模型有兩個方面,其中一個方面依賴于另一個方面,將這兩者封裝在獨立的對象中以使它們可以各自獨立地改變和復用的情況下。
2、當對一個對象的改變需要同時改變其他對象,而又不知道具體有多少對象有待改變的情況下。
3、當一個對象必須通知其他對象,而又不能假定其他對象是誰的情況下。
優缺點:
優點:
1. 支持松耦合,減少依賴性
2. 觀察器可觀察
缺點:
1. 性能降低
2. 內存泄漏
3. 隱藏的依賴項
4. 測試/調試困難
5. 如果在被觀察者之間有循環依賴的話,被觀察者會觸發它們之間進行循環調用,導致系統崩潰,在使用觀察者模式應特別注意這點
實例:
~~~
interface IObserver
{
function onChanged($sender, $args);
}
interface IObservable
{
function addObserver($observer);
}
class UserList implements IObservable
{
private $_observers = array();// 觀察者數組
public function addObserver($observer)// 添加觀察者
{
$this->_observers [] = $observer;
}
public function addCustomer($name)// 執行觀察者方法
{
foreach ($this->_observers as $obs)
$obs->onChanged($this, $name);
}
}
class UserListLogger implements IObserver
{
public function onChanged($sender, $args)
{
echo("'$args' added to user list\n");
}
}
$ul = new UserList ();
$ul->addObserver(new UserListLogger ());// 添加觀察者
$ul->addCustomer("Jack");
~~~
資料來源:
http://www.cnblogs.com/yangjinjin/archive/2013/01/31/2887501.html
http://www.cnblogs.com/zhili/p/ObserverPattern.html
- 前言
- 函數參考
- Socket 函數
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔術方法
- 魔術常量
- 雜項
- backlog的用處
- new self()和new static()的區別
- PHP變量的生命周期
- PHP抽象類
- 對象接口
- PHP中的常用關鍵字
- 常量
- 內存泄露
- global 與 $GLOBAL
- 簡單說明CGI和動態請求是什么
- 設計模式
- 單例模式
- 工廠模式
- 適配器模式
- 策略模式
- 觀察者模式
- 控制反轉IoC簡介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面試
- 數據庫相關
- 語句相關
- 索引相關
- 字段相關
- PHP相關
- 字符串相關
- 函數相關
- 運算符優先級相關
- 錯誤相關
- redis相關
- 10個常見的Redis面試"刁難"問題
- mysql
- MySQL中的鎖
- MySQL存儲引擎MyISAM 和 InnoDB的區別
- MySQL半同步復制
- explain 命令詳解
- 索引
- 數據庫事務
- MySQL和B樹的那些事
- git
- github----向開源框架提交pr的過程
- 推薦博客
- linux
- 命令
- free
- 高并發
- 搶購/秒殺功能
- 算法
- 一致性Hash算法