<?php
interface IObserverable{
function register(IObserver $obj);
function unregister(IObserver $obj);
}
interface IObserver{
function show(array $feed);
}
abstract class FeedObserverable implements IObserverable{
private $_observer_container = array();
public function register(IObserver $obj){
if(!in_array($obj,$this->_observer_container))
array_push($this->_observer_container,$obj);
}
public function unregister(IObserver $obj){
unset($this->_observer_container[$obj]);
}
public function notify($feed){
foreach($this->_observer_container as $observer){
$observer->show($feed);
}
}
}
/**
*html观察者
*/
class htmlView implements IObserver{
public function show(array $feed){
print_r($feed);
}
}
/**
*json观察者
*/
class jsonView implements IObserver{
public function show(array $feed){
echo json_encode($feed);
}
}
/**
*主业务
*/
class feedModel extends FeedObserverable{
private $_feed = array();
public function addNewFeed(array $feed){
//todo
//更新视图
$this->notify($feed);
}
}
//调用方法
$model = new FeedModel();
$feed = array('title'=>'test','content'=>'this is a new feed!');
$model->register(new jsonView());
$model->register(new htmlView());
$model->addNewFeed($feed);
?>