观察者模式实现 用户事件记录
最近在试着做一个问答系统,有个需求是记录用户的各种活动(activities)作为站点动态,传统的实现方式需要写大量重复的代码,而且可能会给后期版本迭代增加难度,为了改善这种情况,可以使用简单的观察者模式。
下面是一个简单的观察者模式示例,它实现了用户在发布问题时,通知EventLog,记录下用户的操作:
<?php
class QuestionActions{
/**
* 内部属性用来存放观察者对象
*/
protected $_observer = null;
/**
* 传入观察者对象
*/
public function notifyObserver($observer){
$this->_observer = $observer;
}
/**
* 调用观察者记录事件
*/
public function putQuestion($user,$question){
$this->_observer->writeLog($user,$question);
}
}
/**
* 定义时间记录类
*/
class EventsLog{
public function writeLog($user,$question){
echo "- <small><b>".$user."</b> 新增了问题:<b>“ ".$question."”</b></small><br/>";
}
}
$action = new QuestionActions();
$action->notifyObserver(new EventsLog());
$action->putQuestion('猪八戒','猴哥,咱们什么时候开饭啊?');
$action = new QuestionActions();
$action->notifyObserver(new EventsLog());
$action->putQuestion('沙和尚','师傅去哪了?');
$action = new QuestionActions();
$action->notifyObserver(new EventsLog());
$action->putQuestion('孙悟空','妖怪哪里逃?');
效果图: