实际开发中哪些场景需要用到观察者模式?

发布于 2022-09-04 18:02:09 字数 47 浏览 23 评论 0

实际开发中哪些场景需要用到观察者模式?能具体例子吗,最好有代码(PHP),谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

荒人说梦 2022-09-11 18:02:09
<?php
/**
 * Created by PhpStorm.
 * User: zhudong
 * Date: 16/8/11
 * Time: 下午4:02
 */
class Newspaper implements SplSubject {
    private $name;
    private $observers;
    private $content;
    public function __construct($name){
        $this->$name = $name;
        $this->observers = new SplObjectStorage();
    }
    public function attach(SplObserver $observer){
        $this->observers->attach($observer);
    }
    public function detach(SplObserver $observer){
        $this->observers->detach($observer);
    }
    public function notify(){
        foreach ($this->observers as $observer) {
            $observer->update($this);
        }
    }
    public function getContent(){
        return $this->content."{$this->name}";
    }
    public function breakOutNews($content) {
        $this->content = $content;
        $this->notify();
    }
}

<?php
/**
 * Created by PhpStorm.
 * User: zhudong
 * Date: 16/8/11
 * Time: 下午4:17
 */
class Reader implements SplObserver {
    private $name;
    public function __construct($name){
        $this->name = $name;
    }
    public function update(SplSubject $subject) {
        echo $this->name.' is reading breakout news'.$subject->getContent();
    }
}

<?php
/**
 * Created by PhpStorm.
 * User: zhudong
 * Date: 16/8/11
 * Time: 下午4:26
 */
include "Newspaper.php";
include "Reader.php";
class WorkFlow {
    public function run() {
        $newspaper = new Newspaper('New York Times');
        $allen = new Reader("allen");
        $jimmy = new Reader("jimmy");
        $tom = new Reader("tom");
        $newspaper->attach($allen);
        $newspaper->attach($jimmy);
        $newspaper->attach($tom);
        $newspaper->detach($tom);
        $newspaper->breakOutNews('USA BREAK DOWN');
        
    }
}
$work = new WorkFlow();
$work->run();

可以看这个例子,newspaper是被观察的对象,reader是观察者。当报纸发布消息, 每一个用户都会得到通知。这就是观察者模式的使用场景。

意犹 2022-09-11 18:02:09

比如按業務來說的話,常見的就好比註冊、下訂單:

  • 註冊:一般會跟活動掛鉤,比如註冊送金幣、積分之類的;包括推薦人之類

  • 下訂單就比較多了,活動是最起碼的;其次比如發短信、郵件等

以上是常見的場景。其實按到現實生活中的例子就是:警察來了,就得通知各個商販趕緊跑路。其中警察就是被觀察者,那些商販就是觀察者。

始终不够爱げ你 2022-09-11 18:02:09

定义:当一个对象状态发生改变时,依赖他的对象全部得到通知
优点:低耦合、非侵入式

唯憾梦倾城 2022-09-11 18:02:09

laravel 事件

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文