<?php
/**
* 觀察者模式
* @author: Mac
*/
class Paper{ /* 主題 */
private $_observers = array();
public function register($sub){ /* 注冊觀察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部統一訪問 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 觀察者要實現的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
下面是測試代碼
/* 測試 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();
總結 當新對象要填入的時候,只需要在主題(又叫可觀察者)中進行注冊(注冊方式很多,你也可以在構造的時候,或者框架訪問的接口中進行注冊),然後實現代碼直接在新對象的接口中進行。這降低了主題對象和觀察者對象的耦合度。 好的設計模式不會直接進入你的代碼中,而是進入你的大腦中。