2011-06-26 188 views
1

嗨我们(我的一个朋友)有不同的来源(wiki内容,论坛评论,文档上传,RSS源......),我们希望在未来的系统中通知不同的来源电子邮件,短信,电话,RSS ...Observer模式的使用方法:update()方法

我们为我们的实施考虑了GoF Observer设计模式。 Observer设计模式是实现这一目标的好方法吗?

我们想想观察员将代码格式化通知的消息(参见例1),但也许我们应该以创建消息(CF例如2)返回一个状态的观测。 关于这种模式,这是一个很好的做法吗?

如果是,update()(默认Observer设计模式方法)的“真正作用”是什么?我们真的不明白。

我们发现这样的例子在网络上(进行更新()实现)

1) http://gbenoit79.blogspot.com/2011/04/design-pattern-observer.html

<?php 
(...) 
class ConcreteObserverA implements SplObserver 
{ 
    public function update(SplSubject $subject) 
    { 
     echo 'ConcreteObserverA received: ' . $subject->getVariable() . "\n"; 
    } 
} 
(...) 

2) http://www.minte9.com/kb/php-observer-pattern-example-php-programming-advanced-i1365

<?php 
(...) 
    class DriverObserver implements Observer{ 
    public function update(Observable $subject) { 
     if ($subject->driven_hours >= 8) { 
     $subject->need_sleep = 1; 
     } else { 
     $subject->need_sleep = 0; 
     } 
    } 
    } 
(...) 

难道他们都valids?

回答

1

没有更多细节,如果观察者模式是一个很好的解决方案并不容易,但它可能是一个有效的解决方案。观察者是观察其他物体的对象,称为主体。当某个学科发生变化时,它会通知其观察员有关其状态的更新。 要将例如: 你的主题是维基的内容,论坛的意见,文件上传,RSS源...和你的观察家JavaScript进行实时PUSH(APE),邮件,短信,电话,RSS ... 你应该写摘要应该包含Observer对象集合的主题类,添加到该集合的非常规方法,从中删除以及选择通知哪些观察者的方法。 Observable的具体实现将比所选观察者更新一些消息数据作为参数。比你需要一个观察者接口将有更新方法,这是更新时被调用的主题。具体的实现可能会比那种更新方法发送电子邮件,推送到网络或注销自己,无论如何。 编码完成后,通过创建观察者来初始化通信,而不是主题,并将观察者添加到主题。