## **觀察者模式**
觀察者模式(Observer),當一個對象狀態發生變化時,依賴它的對象全部會收到通知,并自動更新。
## 應用場景
一個事件發生后,要執行一連串更新操作。
觀察者模式實現了低耦合,非侵入式的通知與更新機制。
> 傳統的編程方式,就是在事件的代碼之后直接加入處理的邏輯。
> 當更新的邏輯增多之后,代碼會變得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件的主體代碼。
## 代碼設計實現
~~~
//定義事件抽象類
abstract class EventGen{
private $observers;
//添加觀察者對象
public function addObserver($observer){
$this->observers[] = $observer;
}
//通知觀察者對象
public function notify(){
foreach($this->observers as $observer){
$observer->update();
}
}
}
//實現事件抽象類的具體類
class Event extends EventGen{
public function trigger(){
echo "trigger event<br>";
}
}
//觀察者接口
interface Observer{
public function update();
}
//觀察者1類
class Observer1 implements Observer{
public function update()
{
echo 'logic one<br>';
}
}
//觀察者2類
class Observer2 implements Observer{
public function update()
{
echo 'logic two<br>';
}
}
$event = new Event();
$observer1 = new Observer1();
$observer2 = new Observer2();
$event->addObserver($observer1);
$event->addObserver($observer2);
$event->trigger();
$event->notify();
~~~
- PHP篇
- 函數傳值和傳引用的區別
- 簡述PHP的垃圾回收機制
- 簡述CGI、FAST-CGI、PHP-FPM的關系
- 常見正則表達式
- 多進程寫文件,如何保證都寫成功
- php支持回調函數的數組函數
- MySQL篇
- MySQL的兩種存儲引擎區別
- 事務的四大特性
- 數據庫事務隔離級別
- 什么是索引
- 索引有哪些數據結構,優缺點
- 索引的一些潛規則
- SQL的優化方案
- 簡述MySQL的鎖機制
- 死鎖是怎么產生的?怎么解決?
- 簡述MySQL的主從復制過程,延遲問題怎么解決
- 分布式事務的解決方案
- 數據庫中間件MyCat
- Linux篇
- Linux常用命令
- 對日志文件的IP出現的次數進行統計,并顯示次數最多的前5名
- WEB篇
- 跨域是怎么產生的,如何解決跨域
- Redis篇
- redis介紹
- redis和memcached區別
- redis的持久化方案
- 緩存穿透、擊穿、雪崩、預熱、更新、降級
- 網絡篇
- 計算機網絡體系結構
- 簡述TCP的三次握手、四次揮手過程
- UDP、TCP 區別,適用場景
- HTTP常見狀態碼含義
- 設計模式篇
- 單例模式
- 簡單工廠模式
- 抽象工廠模式
- 觀察者模式
- 策略模式
- 注冊模式
- 適配器模式
- 安全篇
- 跨站腳本攻擊(XSS)
- 跨站點請求偽造(CSRF)
- SQL 注入
- 應用層拒絕服務攻擊
- PHP安全
- 運維篇
- docker面試題
- 消息隊列篇
- 架構篇
- 數據結構與算法篇