1:觀察者模式(Observer),當一個對象狀態發生變化時,依賴它的對象所有會收到通知,並自動更新。
2:場景:一個事件發生後,要執行一連串更新操做。傳統的編程方式,就是在事件的代碼以後直接加入處理的邏輯。當更新的邏輯增多以後,代碼會變得難以維護。這種方式是耦合的,侵入式的,增長新的邏輯須要修改事件的主體代碼。
3:觀察者模式實現了低耦合,非侵入式的通知與更新機制。
定義一個事件觸發抽象類。php
定義抽象類添加觀察者:編程
EventGenerator.php <?php require_once 'Loader.php'; abstract class EventGenerator{ private $observers = array();
function addObserver(Observer $observer){ $this->observers[]=$observer; } function notify()
{ foreach ($this->observers as $observer){ $observer->update(); } } }
定義一個觀察者接口interface接口:ui
Observer.php <?php require_once 'Loader.php'; interface Observer{ function update();//這裏就是在事件發生後要執行的邏輯 } //一個實現了EventGenerator抽象類的類,用於具體定義某個發生的事件
實現this
require 'Loader.php'; class Event extends EventGenerator{ function triger(){ echo "Event<br>"; } } class Observer1 implements Observer{ function update(){ echo "邏輯1<br>"; } } class Observer2 implements Observer{ function update(){ echo "邏輯2<br>"; } } $event = new Event(); $event->addObserver(new Observer1()); $event->addObserver(new Observer2()); $event->triger(); $event->notify();