天下第七

二也是一种生活态度
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PHP观察者模式

Posted on 2011-09-12 18:31  天下第七  阅读(138)  评论(0)    收藏  举报
<?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);
?>