资讯专栏INFORMATION COLUMN

设计模式之观察者模式

amuqiao / 2764人阅读

摘要:引言意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。何时使用一个对象目标对象的状态发生改变,所有的依赖对象观察者对象都将得到通知,进行广播通知。

引言

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。

使用场景: 1、拍卖场,全部买家都要知晓目前竞争信息 2、报纸,报纸新出一期,要发放给全部订阅者

代码范例
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;
    }
    public function breakOutNews($content) {
        $this->content = $content;
        $this->notify();
    }
}

//观察者
class Reader implements SplObserver {
    private $name;
    public function __construct($name){
        $this->name = $name;
    }
    public function update(SplSubject $subject) {
        echo $this->name ." receive " . $subject->getContent() . PHP_EOL;
    }
}

$newspaper = new Newspaper("times");

$a = new Reader("a");
$b = new Reader("b");
$c = new Reader("c");
//添加观察者/订阅
$newspaper->attach($a);
$newspaper->attach($b);
$newspaper->attach($c);
//移除观察者
$newspaper->detach($a);
//发布
$newspaper->breakOutNews("news 23333");
        

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28690.html

相关文章

  • JS设计模式Obeserver(察者模式、Publish/Subscribe(发布/订阅)模式

    摘要:观察者模式定义设计模式中对的定义一个对象称为维持一系列依赖于它观察者的对象,将有关状态的任何变更自动通知给它们。如图模式比较观察者模式则多了一个类似于话题调度中心的流程,发布者和订阅者解耦。 Obeserver(观察者)模式 定义 《js设计模式》中对Observer的定义:一个对象(称为subject)维持一系列依赖于它(观察者)的对象,将有关状态的任何变更自动通知给它们。 《设计模...

    荆兆峰 评论0 收藏0
  • 设计模式察者设计模式

    摘要:关键概念理解观察者设计模式中主要区分两个概念观察者指观察者对象,也就是消息的订阅者被观察者指要观察的目标对象,也就是消息的发布者。 原文首发于微信公众号:jzman-blog,欢迎关注交流! 最近补一下设计模式相关的知识,关于观察者设计模式主要从以下几个方面来学习,具体如下: 什么是观察者设计模式 关键概念理解 通知观察者的方式 观察者模式的实现 观察者模式的优缺点 使用场景 下面...

    NotFound 评论0 收藏0
  • Java设计模式察者模式

    摘要:观察者模式的使用场景比如你微博关注了一个人,那么这个人发布的微博就会推送到你这。 Java设计模式之观察者模式 一直想写一篇学习观察者模式的总结没有契机,今天学习阻塞队列的原理时候看到在实现生产者消费者的时候用到了通知模式,就是所谓的观察者模式,正好顺便整理一下。 1. 简介 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更...

    haitiancoder 评论0 收藏0
  • PHP设计模式察者模式

    摘要:概念观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。观察者模式符合接口隔离原则,实现了对象之间的松散耦合。 概念 观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。 当一个对象状态发生改变后,会影响到其他几个对象的改变,这...

    phpmatt 评论0 收藏0
  • php面向对象设计模式 察者模式

    摘要:最近在学的设计模式,看到了观察者模式,在此写下一点理解问题假如一个小贩,他把产品的价格提升了,不同的消费者会对此产生不同的反应。 最近在学php 的设计模式, 看到了观察者模式,在此写下一点理解: 问题: 假如一个小贩, 他把产品的价格提升了, 不同的消费者会对此产生不同的反应。一般的编程模式无非是获取提升的价格,然后获取所有的消费者,再循环每个消费者, 不同的消费者根据价格涨幅...

    genedna 评论0 收藏0
  • Python版设计模式监听者模式

    摘要:监听模式又名观察者模式发布订阅模式源监听器模式,模式的核心是设计时要区分谁是被观察者,谁是观察者。 监听模式 又名观察者模式、发布/订阅模式、源-监听器(Source/Listener)模式,模式的核心是:设计时要区分谁是被观察者,谁是观察者。被观察者至少有三个方法,添加观察者、删除观察者、监听目标变化并通知观察者;观察者这至少包含一个方法,当接收到被观察者的通知时,做出相应的处理(即...

    hlcfan 评论0 收藏0

发表评论

0条评论

amuqiao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<