使用Observer模式:update()方法

时间:2011-06-26 21:25:27

标签: design-patterns observer-pattern

嗨我们(我和我的朋友)有不同的来源(维基内容,论坛评论,文档上传,RSS来源......)我们希望在未来的系统中以不同的方式通知:Javascript LIVE PUSH(APE),邮件,短信,电话,RSS ......

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

我们考虑将Observer放置代码以格式化要通知的消息(参见示例1),但是我们可能会将状态返回给Observable以创建消息(参见示例2)。 这种模式是一种好的做法吗?

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

我们在网上找到了这个例子(用于update()实现)

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;
      }
    }
  }
(...)

它们都是有效的吗?

1 个答案:

答案 0 :(得分:1)

如果没有更多细节,就不容易说Observer模式是否是一个好的解决方案,但它可能是一个有效的解决方案。 观察者是观察其他对象的对象,称为对象。当某个主题发生变化时,它会通知其观察者其状态的更新。 举个例子: 您的主题是维基内容,论坛评论,文档上传,RSS源......您的观察者是Javascript LIVE PUSH(APE),邮件,短信,电话,RSS ...... 您应该为应该包含Observer对象集合的主题编写一个抽象类,添加到该集合的方法,从中删除以及选择要通知哪些观察者的方法。 Observable的具体实现不是在一些消息数据作为参数的情况下调用所选观察者的更新。比你需要一个Observer接口,它将有更新方法,当主题更新时调用。具体的实现将比在更新方法中发送电子邮件,推送到网络或取消注册自己,无论如何。 在编码之后,您通过创建观察者而不是主题并向观察者添加观察者来初始化通信。