代码之家  ›  专栏  ›  技术社区  ›  pleasedontbelong

开发网站时何时使用观察者模式?

  •  4
  • pleasedontbelong  · 技术社区  · 14 年前

    我有一个 当用户发布文章(主题)时,类RSS和类电子邮件(观察者)将修改RSS并向管理员发送电子邮件

    你在哪里使用观察者模式?

    顺便说一句:这不是一个家庭作业,我只是躺在这里思考这个模式:)

    编辑

    3 回复  |  直到 14 年前
        1
  •  2
  •   Mark Baker    14 年前

        2
  •  1
  •   Theodore R. Smith    14 年前

    在无状态的PHP中,通常不需要observer模式。

    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);
            }
        }
    }
    
        3
  •  0
  •   tamasd    14 年前

    每次“动作”发生时我都用它。这些东西包括每种实体(用户、内容、标记等)上的基本CRUD,但也包括许多其他操作(用户登录、用户注销、模块加载、模块退出等)。

    我也更喜欢使用 Visitor

    在页面加载中,操作可以发生多次。