我需要的情况下一些实际的例子当开发一个网站的时候。(使用PHP)何时在开发网站时使用观察者模式?
我有我可以使用观察者模式的一个“当用户发布的文章(主题),类RSS和类EMAIL(观察员)将修改rss并发送电子邮件给管理员“,但我甚至不知道这是否是一个好例子。
你在哪里使用观察者模式?
BTW:这不是一门功课,我只是躺在这里想着这个模式:)
EDITED 我更好奇“什么时候做”,而不是“如何做它“
我需要的情况下一些实际的例子当开发一个网站的时候。(使用PHP)何时在开发网站时使用观察者模式?
我有我可以使用观察者模式的一个“当用户发布的文章(主题),类RSS和类EMAIL(观察员)将修改rss并发送电子邮件给管理员“,但我甚至不知道这是否是一个好例子。
你在哪里使用观察者模式?
BTW:这不是一门功课,我只是躺在这里想着这个模式:)
EDITED 我更好奇“什么时候做”,而不是“如何做它“
我有一个对象(单元格)的集合(数组)作为”cellCollection“对象的属性。为了减少内存使用量,每个单元格实际上都是以缓存(磁盘文件,APC,memcache等)的序列化形式保存的,而“cellCollection”对象保存指向缓存位置的指针数组。我使用observer模式,以便每当“cell”对象被修改时通知“cellCollection”对象,以便它可以更新缓存中该“cell”对象的主副本,并根据需要调整其指针。
您通常不需要多或少无状态PHP的观察者模式。
但是,请考虑以下内容。我跳过了一些代码,但你应该可以填写空白。
class Stats extends Observer implements SplObserver
{
private function updateStats($action) { }
public function update(SplSubject $subject)
{
if ($subject instanceOf Article)
{
if ($subject->notice == Article::NOTICE_POSTED_ARTICLE)
{
$this->updateStats($subject->notice);
}
}
}
}
class Article extends Subject implements SplSubject
{
const NOTICE_POSTED_ARTICLE = "Article Posted";
private $observers;
public $notice;
public function postArticle($text)
{
$this->notice = self::NOTICE_POSTED_ARTICLE;
$this->notify();
}
public function notify()
{
foreach ($this->observers as $observer)
{
$observer->update($this);
}
}
}
因为你的类文章扩展了“Subject”,如果notify()不会更好, $ observers和$ notice在父类中的位置? 无论如何它作为一个例子,thxs – pleasedontbelong 2010-08-30 22:19:34
我每次发生“行动”时都会使用它。这些东西包括每种实体(用户,内容,标签等)的基本CRUD,但包括许多其他操作(用户登录,用户注销,模块加载,模块退出等)。
我还喜欢在东西被加载之后,或者在东西被保存(插入或更新到数据库)之前,或者在东西(例如表单)被渲染以改变数据结构之前,使用Visitor
模式。
操作可能会在页面加载中发生多次。
我migath听起来像一个noob在这里,但...你可以做到这一点在PHP?缓存中需要什么样的数据?你有链接,我可以学习这样做吗? – pleasedontbelong 2010-08-30 22:14:11
是的,你可以用PHP来完成,否则我将无法做到!有问题的应用程序是PHPExcel,其中Excel工作表可以包含数千个单元,其中每个单元都是由工作表的cellCollection对象引用的对象。一些关于使用观察者模式的文章:http://www.devshed.com/c/a/PHP/An-Introduction-to-the-Observer-Pattern-in-PHP/或http://devzone.zend .com/article/5或http://gauravjassal.com/php/observer-pattern-in-php-part-1/ – 2010-08-30 23:30:31