专栏首页程序员财富自由之路Go 设计模式-观察者模式

Go 设计模式-观察者模式

设计模式

观察者模式

观察者模式,也被称为发布订阅模式(Publish-Subscribe Design Pattern)

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

翻译中文:

在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。

观察者模式的

应用场景

观察者模式需要三个条件:观察者 被观察,话题订阅

实际场景可以是:

  • 公众号推送消息,独立的微信号关注多个公众号 ,每次总能收到公众号发布的更新内容,订阅号也会将公众号置顶标红提醒
  • 邮件订阅
  • RSS Feeds

代码

package observer

import "fmt"

type Subject struct {
 observers []Observer
 context   string
}

func NewSubject() *Subject {
 return &Subject{
  observers: make([]Observer, 0),
 }
}

func (s *Subject) Attach(o Observer) {
 s.observers = append(s.observers, o)
}

func (s *Subject) notify() {
 for _, o := range s.observers {
  o.Update(s)
 }
}

func (s *Subject) UpdateContext(context string) {
 s.context = context
 s.notify()
}

type Observer interface {
 Update(*Subject)
}

type Reader struct {
 name string
}

func NewReader(name string) *Reader {
 return &Reader{
  name: name,
 }
}

func (r *Reader) Update(s *Subject) {
 fmt.Printf("%s receive %s\n", r.name, s.context)
}

测试代码

package observer

func ExampleObserver() {
 subject := NewSubject()
 reader1 := NewReader("reader1")
 reader2 := NewReader("reader2")
 reader3 := NewReader("reader3")
 subject.Attach(reader1)
 subject.Attach(reader2)
 subject.Attach(reader3)

 subject.UpdateContext("observer mode")
 // Output:
 // reader1 receive observer mode
 // reader2 receive observer mode
 // reader3 receive observer mode
}

参考资料

  • https://github.com/senghoo/golang-design-pattern

本文分享自微信公众号 - 程序员财富自由之路(gh_016ffe40d550),作者:猿星人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式 ——— 观察者模式

    tomas家的小拨浪鼓
  • 设计模式----观察者模式

    SuperHeroes
  • 设计模式:观察者模式

    今天介绍另一种模式 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式。 今天做一个订报纸的小例子来理解一下观察者...

    lpxxn
  • 设计模式-观察者模式

    JDK中也有自带的观察者模式。但是被观察者是一个类而不是接口,限制了它的复用能力。

    Anymarvel
  • 设计模式-观察者模式

    软件系统很多时候需要这样的情况,一旦发生故障,就通知对应的系统或模块,使之能够及时处理。

    breezedancer
  • 设计模式-观察者模式

    模式定义 定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。主题(Subject)是被观察的对象,而其所有依赖者(Obse...

    武培轩
  • 设计模式-观察者模式

    在我们的程序中,可能需要在某些数据变化的时候,其他类做出一些响应。不能开一个线程,然后每隔一段时间去检查数据是否有变化。更希望的是当一些内数据变化时,主动推送变...

    王小明_HIT
  • 设计模式-观察者模式

    自从有了微信公众号后,关注了某个公众号基本每天都有新的文章推送的通知,我们可以很方便的进行查阅,了解最新的资讯,什么老美放大水、什么中东又暴乱了,第一时间就知道...

    逍遥壮士
  • 【设计模式-观察者模式】

    【导读】队列中有一种模式是发布/订阅模式,订阅者可以有多个,当发布者发布了消息的时候,订阅者会收到通知,这就是观察者模式,也可以理解为生产者/消费者。

    Liusy
  • 设计模式 | 观察者模式

    这个设计模式很常用、重要, 所以要好好看。这是一个非常经典的设计模式, 解决了不少问题, 在实际项目中应用比较广泛。

    憧憬博客
  • 设计模式~观察者模式

    观察者模式是对象的行为模式,又叫做发布-订阅模式(Publicsh/Subscribe)、模型-视图模式(Model/View)、源-监听器模式(Source/...

    Vincent-yuan
  • 设计模式--观察者模式

      测量数据更新时需时时通知给第三方 需要设计开放型API,便于其他第三方公司也能接入气象站获取数据

    HUC思梦
  • 观察者模式(设计模式)

    观察者模式其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。可以想象成消息中间件在系统中的作用。SpringBoot...

    WindSun
  • 设计模式-观察者模式

    cwl_java
  • 设计模式——观察者模式

    设计模式——观察者模式

    Java架构师必看
  • java设计模式-观察者模式

    三哥
  • JAVA 设计模式 观察者模式

    用途 观察者模式 (Observer) 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态发生变化时,会通知所...

    静默虚空
  • Java设计模式-观察者模式

    观察者模式: 又称‘发布-订阅’模式, 定义一种对象间的一对多依赖关系(多个观察者Observer监听某一主题Subject). 当主题状态发生改变时,所有依赖...

    Java帮帮
  • java设计模式-观察者模式

    基本概念:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己...

    哲洛不闹

扫码关注云+社区

领取腾讯云代金券